1、newSingleThreadExecutor:单个线程
3、newCachedThreadPool:可伸缩线程池
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
1、corePoolSize:核心线程池大小
2、maximumPoolSize:最大线程池大小
3、keepAliveTime:超时了没人使用时释放的时间
4、unit:超时释放时间单位
5、workQueue:阻塞队列
6、threadFactory:创建线程的,一般不用动
7、handler:拒绝策略
策略一:new ThreadPoolExecutor.AbortPolicy 线程数超出允许最大处理线程数+等候队列容量时抛出异常
策略二:new ThreadPoolExecutor.CallerRunsPolicy 哪来的回哪去,主线程处理超出的线程
策略三:new ThreadPoolExecutor.DiscardPolicy 队列满了丢掉任务,不抛出异常
策略四:new ThreadPoolExecutor.DiscardOldestPolicy 对了满了,尝试和最早的线程竞争,失败了丢掉任务
线程池的好处:
1、降低资源的消耗
2、提高响应的速度
3、方便管理
线程复用,控制最大并发数,管理线程
例子:
import java.util.concurrent.*;
public class Demo02 {
public static void main(String[] args) throws InterruptedException {
ExecutorService threadPool = new ThreadPoolExecutor(2, 5, 3, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(3), Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy());
for (int i = 0; i < 9; i++) {
threadPool.execute(()->{
System.out.println(Thread.currentThread().getName() + "办理");
});
}
threadPool.shutdown();
}
}
原文:https://www.cnblogs.com/gdstcymc/p/15099920.html