在java中,有着四种线程池,你们知道它们分别是怎么实现的吗?它们的原理又有哪些呢?下面快来看看吧。
一、 newCachedThreadPool
原理
newCachedThreadPool,这是一种线程数量不定的线程池,newCachedThreadPool的最大线程数是Integer.MAX_VALUE,这是一个非常大的数。
newCachedThreadPool是一个可缓存线程池,假如,线程池长度超过处理需要,那么就会回收空闲线程,假如没有可以回收线程,那么,就会新建线程。
可是,在线程池中的空闲线程都是有时间限制的,时长是60秒,超过60秒闲置线程,那么就会被回收。
调用execute将重用以前构造的线程(假如线程可用)。
这样的线程池比较适合执行大量的耗时较少的任务,在整个线程池都处在闲置状态的时候,线程池当中的线程都会超时被停止。
具体实现
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE , 60 L, TimeUnit.SECONDS , new SynchronousQueue < Runnable > ()); }
二、newFixedThreadPool
原理
newFixedThreadPool创建的是一个指定工作线程数量的线程池,每次在它提交一个任务的时候,就会创建一个工作线程,在线程处在空闲状态的时候,它们不会被回收,除非是线程池关闭,可是,假如工作线程的数量达到线程池初始的最大数了话,那么,它就会将提交的任务存入到池队列当中。
newFixedThreadPool只有核心线程,并且,这些核心线程都不会被回收,所以它才能够更加快速底相应外界的请求。
具体实现
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads , 0 L, TimeUnit.MILLISECONDS , new LinkedBlockingQueue < Runnable > ()); }
三、 newScheduledThreadPool
原理
newScheduledThreadPool是一个定长线程池,newScheduledThreadPool的核心线程数量是固定的,并且,是没有限制的,除此之外,当非核心线程处于闲置的时候,会立马被回收,它会安排给定延迟后运行命令或者是定期地执行。
具体实现
public static ScheduledExecutorService newScheduledThreadPool( int corePoolSize, ThreadFactory threadFactory) { return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory); }
四、newSingleThreadExecutor
原理
newSingleThreadExecutor线程池是一个单线程化线程池,newSingleThreadExecutor内部只有一个核心线程,会以无界队列方式来执行这个线程,使得这些任务之间不需要处理线程同步的问题,它会确保所有的任务都在同一个线程里面依照顺序中执行,并且可以在任意给定的时间不会有多个线程是活动的。
具体实现
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1 , 0 L, TimeUnit.MILLISECONDS , new LinkedBlockingQueue < Runnable > ())); }
以上就是本文的所有内容了,还想要深入了解更多有关线程池的java常见问答知识的话,就请持续关注我们的网站吧。
推荐阅读: