3.多线程(线程池)

发布时间 2023-09-24 16:02:46作者: 回家太晚太悲催

多线程(线程池)

线程池:

主要核心原理:
1.创建一个池子,池子中是空的;
2.提交任务时,池子会创建新的线程对象,任务执行完毕,线程归还给池子;
  下回再次提交任务时,不需要创建新的线程,直接复用已有的线程即可;
3.但是如果提交任务时,池子中没有空闲线程,也无法创建新的线程,任务就会排队等待;
创建线程池的方法:
public static ExecutorService newCachedThreadPool()					创建一个没有上限的线程池(int的最大值)
public static ExecutorService newFixedThreadPool(int nThreads)		创建有上限的线程池
自定义线程池:
创建自定义线程池:
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor()		自定义线程池,有七个参数
七大参数:
参数一:正式员工数量						     ->			核心线程数量(不能小于0)
参数二:餐厅最大员工数					        ->		    线程池中最大线程的数量(最大数量>=核心线程数量)
参数三:临时员工空闲多长时间被辞退(值)	       ->		   空闲时间(值)(不能小于0)
参数四:临时员工空闲多长时间被辞退(单位)	      ->		  空闲时间(单位)(用TimeUnit指定)
参数五:排队的客户						     ->			 阻塞队列(不能为null)
参数六:从哪里招人						     ->			创建线程的方式(不能为null)
参数七:当排队人数过多,超出顾客请下次再来(拒绝服务)->		  要执行的任务过多时的解决方案(不能为null)

任务拒绝策略:
ThreadPoolExecutor.AbortPolicy				默认策略:丢弃任务并抛出RejectedExecutionException异常(内部类)
工作原理:
  1. 创建一个空的池子;
  2. 有任务提交时,线程池会创建线程去执行任务,执行完毕归还线程;
  • 不断地提交任务,会有以下三个临界点:
    1. 当核心线程满时,再提交任务就会排队;
    2. 当核心线程满,队伍满时,会创建临时线程;
    3. 当核心线程满,队伍满,临时线程满时,会触发任务拒绝策略;
线程池的大小: