并发编程(十三)—— Java 线程池 实现原理与源码深度解析 之 Executors(三)

 目录

1 public static ExecutorService newFixedThreadPool(int nThreads) { 2     return new ThreadPoolExecutor(nThreads, nThreads, 3                                   0L, TimeUnit.MILLISECONDS, 4                                   new LinkedBlockingQueue<Runnable>()); 5 }
复制代码

最大线程数设置为与核心线程数相等,则不会创建临时线程,创建的线程都是核心线程,线程也不会被回收。此时 keepAliveTime 设置为 0(因为这里它是没用的,即使不为 0,线程池默认也不会回收 corePoolSize 内的线程),任务队列采用 LinkedBlockingQueue,无界队列,所以FixedThreadPool永远不会拒绝, 即饱和策略失效。

过程分析:刚开始,每提交一个任务都创建一个 worker,当 worker 的数量达到 nThreads 后,不再创建新的线程,而是把任务提交到 LinkedBlockingQueue 中,而且之后线程数始终为 nThreads。

newSingleThreadExecutor

  • 生成只有一个线程的固定线程池
复制代码
1 public static ExecutorService newSingleThreadExecutor() { 2     return new FinalizableDelegatedExecutorService 3         (new ThreadPoolExecutor(1, 1, 4                                 0L, TimeUnit.MILLISECONDS, 5                                 new LinkedBlockingQueue<Runnable>())); 6 }
复制代码

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信