不懂并发?看完就超神!!!Java并发基础(三)

线程池

ThreadPoolExecutor

在这里插入图片描述

线程池状态

在这里插入图片描述

七个构造方法参数

在这里插入图片描述
线程池中主要分为核心线程,救急线程,阻塞队列,核心线程会不断执行任务,任务执行完后会接着执行任务(一直存在),而救急线程是在阻塞队列满后,就会接下任务的线程(抢救),corePoolSize指定core thread的数量,而maximumPoolSize就是core thread和救急线程的总和。

keepalivetime、unit表示救急线程的生存时间和时间单位,救急线程在执行完任务后会等待keepalivetime指定的一段时间,然后销毁,直到下次阻塞队列满时重新创建。

workqueue在核心线程使用完后,就将任务放在阻塞队列等待。

threadfactory可以自定义一个,使用自己的命名方式。

handler当阻塞队列、救急线程、核心线程都是满的状态下,就会执行拒绝策略。
在这里插入图片描述

救急线程

创建救急线程的前提在选择了有界队列,当任务超过队列大小时就会创建救急线程,而如果选择无界就不存在救急线程。

四种拒绝策略

在这里插入图片描述

阻塞队列

BlockingQueue
在这里插入图片描述

executor不适用

在实际中不常用executor来创建线程池。
在这里插入图片描述
executor提供众多工厂方法创建个种用途的线程池(其实就是调用构造方法,将一些参数写好,另一些参数自定义)。

newfixedthreadpool
在这里插入图片描述
固定大小的线程池,这种线程池没有救急线程,同时使用无界的阻塞队列,可以放任意数量的任务。

newcachedthreadpool
在这里插入图片描述
只有一个核心线程,没有救急线程,阻塞使用无界的阻塞队列。

提交任务

在这里插入图片描述
submit
使用保护性暂停模式,会等待接收返回的结果。

invokeall
inovkeall会指定时间,时间过后还没拿到结果的就取消其他任务。

invokeany
只会将最先执行完的任务结果返回,并取消其他任务。

关闭线程池

shutdown
在这里插入图片描述
shutdownnow
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/TheCarol/article/details/113046910