Java并发之ThreadPoolExecutor
Posted 三名狂客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发之ThreadPoolExecutor相关的知识,希望对你有一定的参考价值。
一、ThreadPoolExecutor 简介
ThreadPoolExecutor
是一个可被继承 ( extends ) 的线程池实现,包含了用于微调的许多参数和钩子。主要参数如下:
(1) corePoolSize 核心线程数
(2) maximumPoolSize 最大线程数
(3) keepAliveTime 实例化超过 corePoolSize 的线程,在空闲状态下的存活时间
二、Executor实例化
(1) Executors.newSingleThreadExecutor()
Executors.newSingleThreadExecutor()
静态方法则创建另一种典型的只包含单个线程的 ThreadPoolExecutor
实例。
这种单线程执行程序是创建事件循环的理想选择。在这个单线程 ThreadPoolExecutor
实例中,属性 corePoolSize
和属性 maximumPoolSize
的值都为 1
,而属性 keepAliveTime
的值为 0
。
(2)Executors.newFixedThreadPool()
Executors.newFixedThreadPool()
静态方法创建了一个 ThreadPoolExecutor
,它的参数 corePoolSize
和 maximumPoolSize
都是相等的,且参数 keepAliveTime
始终为 0
,也就意味着此线程池中的线程数始终相同。
(3)Executors.newCachedThreadPool()
Executors
还提供了 Executors.newCachedThreadPool()
静态方法创建另一个预配置的 ThreadPoolExecutor
。该方法创建的线程池没有任何核心线程,因为它将 corePoolSize
属性设置为 0
,但同时有可以创建最大数量的额外线程,因为它将 maximumPoolSize
设置为 Integer.MAX_VALUE
,且将 keepAliveTime
的值设置为 60
秒。
三、线程实例
package day01;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 线程池
*
* @author zc
*
*/
public class ThreadPoolExecutorTest
public static void main(String[] args)
AtomicInteger counter = new AtomicInteger();
// 单线程
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(()->counter.set(1););
executor.submit(()->counter.compareAndSet(1, 2););
// 固定大小的线程池
ThreadPoolExecutor executors = (ThreadPoolExecutor) Executors.newFixedThreadPool(2);
executors.submit(()->Thread.sleep(1000);
return null;);
executors.submit(()->Thread.sleep(1000);
return null;);
executors.submit(()->Thread.sleep(1000);
return null;);
// 没有核心线程的线程池
ThreadPoolExecutor executorCache = (ThreadPoolExecutor) Executors.newCachedThreadPool();
executorCache.submit(()->Thread.sleep(1000);
return null;);
executorCache.submit(()->Thread.sleep(1000);
return null;);
executorCache.submit(()->Thread.sleep(1000);
return null;);
以上是关于Java并发之ThreadPoolExecutor的主要内容,如果未能解决你的问题,请参考以下文章
java并发编程之Future.get() 在线程池配置RejectedExecutionHandler为ThreadPoolExecutor.DiscardPolicy策略时一直阻塞
java并发编程之Future.get() 在线程池配置RejectedExecutionHandler为ThreadPoolExecutor.DiscardPolicy策略时一直阻塞
java并发编程之Future.get() 在线程池配置RejectedExecutionHandler为ThreadPoolExecutor.DiscardPolicy策略时一直阻塞
java同步之线程池ThreadPoolExecutor实现原理