Java中定义了一个Executor的接口并且在接口中定义了execute()方法用来执行一个线程任务。然后通过ExecutorService实现了Executor接口用来执行具体的线程操作。
ExecutorService接口实现了多个类用来创建不同的线程池,其中最常见的线程池有如下几种
- newCachedThreadPool 可以缓存的线程池
- newFixedThreadPool 可固定大小的线程池
- newScheduleThreadPool 可以用来任务调用的线程池
- newSingleThreadExecutor 单线程的线程池
- newWorkStealingPool 足够大小的线程池,属于JDK1.8新增的内容
newCachedThreadPool
newCachedThreadPool用来创建一个缓存线程池,为什么叫做缓存线程池,因为在创建新线程的时候如果存在可以重用的线程,就启动重用这些线程,如果没有的话就需要重新创建一个线程并且将这个线程添加到线程池中。
在实际开发中会遇到一些执行时间相对较短的任务,newCachedThreadPool 线程池的这种重用机制可以大大地提升系统的执行效率。
在线程池在KeepAliveTime时间超过默认时间之后,这个线程就会被终止,并且从缓存中进行移除,所以这样一来在没有线程执行的时候,newCachedThreadPool线程池不会占用系统的线程资源,可以节省一部分的线程资源。
该线程池具体的创建方法如下
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue