文章目录
一:为什么要使用线程池
1:线程池的特点
线程复用;控制最大并发数;管理线程
- 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的销耗。
- 提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。
- 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会销耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
2:使用的接口/类
Java中的线程池是通过Executor接口、Executors类实现的,主要的相关接口/类有:Executor,Executors,ExecutorService,ThreadPoolExecutor
Ps:Executors是Executor的工具类,就像Arrays是数组的工具类,Collections是集合的工具类一样
二:使用线程池
1:使用工具类
使用【ExecutorService接口 + Executors工具类】使用线程池
(1)使用 Executors工具类的三种方式:
- ExecutorService executorService = Executors.newFixedThreadPool(int); //指定线程池内的线程个数
- ExecutorService executorService = Executors.newSingleThreadExecutor(); //线程池内的线程个数只能为1个
- ExecutorService executorService = Executors.newCachedThreadPool(); //缓冲线程池:其默认的固定线程为0,但是其几乎可以无限扩充线程(最大值为Integer.MAX_VALUE),它会随着需要的线程数而自动创建线程,但不需要的时候,会自动销毁线程
(2)示例
Executors.newFixedThreadPool(int)
Executors.newSingleThreadExecutor()
Executors.newCachedThreadPool()