Java-线程池(一)

目录

一、使用线程池的好处:

二、线程池的工作原理

三、线程池的分类

四、 线程池的生命周期 ​

 五、线程池的创建​

六、阻塞队列

七、拒绝策略

八、 execute方法执行逻辑

 九、Executor和Submit

十、 线程池的关闭 


一、使用线程池的好处:

1、使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和 销毁时造成的消耗

2、由于没有线程创建和销毁时的消耗,可以提高系统响应速度 –

3、通过线程可以对线程进行合理的管理,根据系统的承受能力调整可运行 线程数量的大小等

二、线程池的工作原理

 工作原理 ▪ 线程池执行所提交的任务过程:

1、先判断线程池中核心线程池所有的线程是否都在执行任务。 如果不是,则新创建一个线程执行刚提交的任务,否则,核心线 程池中所有的线程都在执行任务,则进入第2步; 

2、判断当前阻塞队列是否已满,如果未满,则将提交的任务放 置在阻塞队列中;否则,则进入第3步;

 3、判断线程池中所有的线程是否都在执行任务,如果没有,则 创建一个新的线程来执行任务,否则,则交给饱和策略进行处理

三、线程池的分类

四、 线程池的生命周期 

RUNNING :能接受新提交的任务,并且也能处理阻塞队列中的任务;

SHUTDOWN:关闭状态,不再接受新提交的任务,但却可以继续处理阻 塞队列中已保存的任务。

STOP:不能接受新任务,也不处理队列中的任务,会中断正在处理任务的 线程。

TIDYING:如果所有的任务都已终止了,workerCount (有效线程数) 为0, 线程池进入该状态后会调用 terminated() 方法进入TERMINATED 状态。

TERMINATED:在terminated() 方法执行完后进入该状态,默认 terminated()方法中什么也没有做

 五、线程池的创建

 参数说明

corePoolSize:核心线程池的大小

 maximumPoolSize:线程池能创建线程的最大个数

keepAliveTime:空闲线程存活时间

unit:时间单位,为keepAliveTime指定时间单位

workQueue:阻塞队列,用于保存任务的阻塞队列

 threadFactory:创建线程的工程类

handler:饱和策略(拒绝策略

六、阻塞队列

ArrayBlockingQueue

LinkedBlockingQueue

DelayQueue

PriorityBlockingQueue

SynchronousQueue

七、拒绝策略

ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出 RejectedExecutionException异常。 ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛 出异常。 ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的 任务,然后重新尝试执行任务(重复此过程)

ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

八、 execute方法执行逻辑

如果当前运行的线程少于corePoolSize,则会创建新的线程来执 行新的任务;

 如果运行的线程个数等于或者大于corePoolSize,则会将提交的 任务存放到阻塞队列workQueue中;

如果当前workQueue队列已满的话,则会创建新的线程来执行 任务;

如果线程个数已经超过了maximumPoolSize,则会使用饱和策 略RejectedExecutionHandler来进行处理。

 九、Executor和Submit

十、 线程池的关闭 

关闭线程池,可以通过shutdown和shutdownNow两个方法

原理:遍历线程池中的所有线程,然后依次中断

1、shutdownNow首先将线程池的状态设置为STOP,然后尝试停 止所有的正在执行和未执行任务的线程,并返回等待执行任务的 列表;

2、shutdown只是将线程池的状态设置为SHUTDOWN状态,然 后中断所有没有正在执行任务的线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值