Executor
Executor是Java中的概念,是一个接口,真正的线程池实现是ThreadPoolExecutor。
它提供了一系列的参数来配置不同的线程池。
ThreadPoolExecutor
ThreadPoolExecutor是线程池的真正实现,他的构造方法提供了一系列参数来配置线程池,
public ThreadPoolExecutor(
int corePoolSize,//核心线程数
int maximumPoolSize,//最大线程数
long keepAliveTime, //非核心线程的超时时间
TimeUnit unit,//单位
BlockingQueue<Runnable> workQueue,//任务队列
ThreadFactory threadFactory//线程工厂
)
除了这些参数外还有个很不常用的参数RejectedExecutionHandler handler。
当线程池无法执行新任务时(任务队列满了或者无法成功执行)会调用handler的rejectExecutionException。
线程池的类别
在Executors里面对应的线程池有一下几种实现:
cached ThreadPool
缓存线程池的特点是它会缓存之前的线程,新提交的任务可以运行在缓存的线程中,即实现了前文所述的第一个优势。
fixed ThreadPool
cachedThreadPool的一个特点是——新提交的任务没有空闲线程可以执行了,就会创建一个新的线程。而fixedThreadPool不会这样,它会将任务保存起来,等到有空闲线程再执行。即实现了前文所述的第二个优势。
scheduled ThreadPool
scheduled ThreadPool的特点是可以实现任务的调度,比如任务的延迟执行和周期执行。
代码实例
ThreadPoolExecutor executor1 = (ThreadPoolExecutor)Executors.newCachedThreadPool();
ThreadPoolExecutor executor2 = (ThreadPoolExecutor)Executors.newFixedThreadPool(4);
网友评论