ThreadPoolExecutor-实现自定义线程池
?
自定义连接池稍微麻烦些,不过通过创建的ThreadPoolExecutor线程池对象,可以获取到当前线程池的尺寸、正在执行任务的线程数、工作队列等等.
?
下面创建一个执行任务类继承至Thread类,也可以实现Runnable接口,效果一样.
package pack.java.custom;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * 自定义线程池; * @author zhouhaitao * 2012-4-11 */public class CustomThreadPool {/** * @param args */public static void main(String[] args) {//创建等待队列;BlockingQueue<Runnable> blockingQueue = new ArrayBlockingQueue<Runnable>(20);//创建一个单线程执行程序,它可以安排在指定的时间执行或者定期执行;ThreadPoolExecutor pool = new ThreadPoolExecutor(3, 5, 2, TimeUnit.MILLISECONDS, blockingQueue);Thread thread1 = new RunnableTask(1);Thread thread2 = new RunnableTask(2);Thread thread3 = new RunnableTask(3);pool.execute(thread1);pool.execute(thread2);pool.execute(thread3);//关闭线程池;pool.shutdown();}}
?
?
执行结果:
----------------------------------------------------
0
1
2
线程1执行完成.
0
1
2
线程3执行完成.
0
1
2
线程2执行完成.
?
ThreadPoolExecutor构造方法参数介绍:
public ThreadPoolExecutor(int corePoolSize,??
????????????????????????? int maximumPoolSize,??
????????????????????????? long keepAliveTime,??
????????????????????????? TimeUnit unit,??
????????????????????????? BlockingQueue<Runnable> workQueue)
用给定的初始参数和默认的线程工厂及处理程序创建新的 ThreadPoolExecutor。
使用 Executors 工厂方法之一比使用此通用构造方法方便得多。?
?
参数:???
corePoolSize - 池中所保存的线程数,包括空闲线程。???
maximumPoolSize - 池中允许的最大线程数。???
keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。???
unit - keepAliveTime 参数的时间单位。???
workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的 Runnable 任务。???
抛出:???
IllegalArgumentException - 如果 corePoolSize 或 keepAliveTime 小于零,
或者 maximumPoolSize 小于或等于零,或者 corePoolSize 大于 maximumPoolSize。???
NullPointerException - 如果 workQueue 为 null?
?
?
引用:
http://longzhun.iteye.com/blog/1404836