Java教程

线程池

本文主要是介绍线程池,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  1. 线程池:

(1) 线程池的返回值ExecutorService简介:

ExecutorService是Java提供的用于管理线程池的接口。该接口的两个作用:控制线程数量和重用线程

(2)4中常用线程池

  1. Executors.newCacheThreadPool():可缓存线程池,先查看池中有没有以前建立的线程,如果有,就直接使用。如果没有,就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务
  2. Executors.newFixedThreadPool(int n):创建一个可重用固定个数的线程池,以共享的无界队列方式来运行这些线程。
  3. Executors.newScheduledThreadPool(int n):创建一个定长线程池,支持定时及周期性任务执行
  4. Executors.newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

 

ThreadPoolExecutor为例:

 

继承体系:

 

 

 

 

 

构造方法:

 

 

 

 

corePoolSize: 线程池核心线程数

maximumPoolSize:线程池最大数

keepAliveTime: 空闲线程存活时间

unit: 时间单位         

workQueue: 线程池所使用的缓冲队列

threadFactory:线程池创建线程使用的工厂

handler: 线程池对拒绝任务的处理策略

 

 

 

线程池运行过程:

  1. 构建线程池时初始线程池中的线程数是0
  2. 两个任务->创建两个核心线程
  3. 第三个任务->添加到任务队列
  4. 一直到任务队列满了为止 ->下一个任务线程池开始创建临时线程处理
  5. 如果任务队列满了并且达到了最大线程数->下一个到来的任务,线程池启用

拒绝机制。

默认的拒绝策略为抛异常

 

 

线程池的五种状态:

 

 

 

  1. 线程池调用了shutdown()方法:

   线程池不再接受任务,任务队列中还存在的任务会继续执行完。

  1. 调用shutdownNow()方法:

线程不在执行当前的任务

  1. 当线程都停下来后进入tidying状态
  2. 执行terminated方法  terminated方法系统没有实现,需要自己实现。
  3. Terminated状态

 

这篇关于线程池的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!