多线程part8-线程池
以前写多线程的弊端
用到线程的时候就创建
用完之后线程消失
为了避免浪费,所以我们需要一个容器
起初线程池是空的,当给线程池提交任务时会自动创建线程去执行任务,执行完后线程不消失,回归线程池,之后就不需要创建线程
当线程正忙着执行一个任务时,会创建新的线程
核心原理
1.创建空池子
2.提交任务时,池子创建新的线程对象,任务执行完毕,线程回归池子,下次再次提交任务时,不需要创建新的线程,直接复用已有的
3.提交任务时,池子没有空闲线程,也无法创建新的线程时,任务会排队等待
代码实现:
Executors:线程池的工具类通过调用方法返回不同类型的线程池对象
ExecutorService newCacheThreadPool() 创建一个没有上限的线程池(上限为int的最大值)
ExecutorService newFixedThreadPool(int nThreads) 创建有上限的线程池