为什么用线程池,优势
线程池如何使用?
架构说明
编码实现
了解
重点
Executor.newFixThreadPool(int)
执行长期任务。
Executor.newSingleThreadExecutor
一个任务。
Executor.newCachThreadPool()
执行很多任务。
案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/**
* @desc 线程池demo
* @Author xw
* @Date 2019/8/23
*/
public class MyThreadPoolDemo {
public static void main(String[] args) {
// ExecutorService threadPool = Executors.newFixedThreadPool(5); // 固定线程数
// ExecutorService threadPool = Executors.newSingleThreadExecutor(); // 单池
ExecutorService threadPool = Executors.newCachedThreadPool();
try {
for (int i = 1; i <= 10; i++) {
threadPool.execute(() -> {
System.out.println(Thread.currentThread().getName() + "\t 办理业务");
});
}
} finally {
threadPool.shutdown();
}
}
}
ThreadPoolExecutor
1 | /** |
线程池的几个重要参数介绍?
- corePoolSize:线程池中的常驻核心线程数
- maxnumPoolSize:线程池能够容纳同时执行的最大线程数,此值必须大于等于1
- keepAliveTime:多余的空闲线程的存活时间。当线程池数量超过corePoolSize时,当空闲时间达到keepAliveTime值时,多余空闲线程会被销毁直到只剩下corePoolSize个线程为止
- unit:KeepAliveTime单位
- workQueue:任务队列,被提交但尚未被执行的任务。
- threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程一般默认的即可。
- handler:拒绝策略,表示当队列满了并且工作线程大于等于线程池的最大线程数(maxnumPoolSize)