线程池你值的了解

线程池简单的认识:

为什么要用线程池
降低资源消耗
提高响应速度
提高线程的可管理性

ThreadPoolExecutor的类关系
Executor是一个接口,它是Executor的基础框
ExecutorService接口继承了Executor
AbstractExecutorService抽象类实现了ExecutorService接口中的大部分方法
ThreadPoolExecutor是线程池的核心实现类,用来执行被提交的任务
ScheduledExecutorService接口继承了ExecutorService接口,
提供了带周期执行的功能。

线程池创建各个参数的概念
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long
keepAliveTime,TimeUnit unit,BlockingQueue workQueue,ThreadFactory
threadFactory,RejectedExecutionHandler handler)

corePoolSize
线程池中的核心线数量

maximumPoolSize
线程池中允许的最大线程数,如果当前阻塞队列满了,且继续提交任务,
则创建新的线程执行任务,前提是当前线程数小于maximumPoolSize

keepAliveTime
线程空闲的存活时间,即当前线程没有任务时,继续存活
的时间,该参数只有在线程数大于corePoolSize才生效

workQueue
用于保存等待执行的任务的阻塞队列。

threadFactory
可以为线程设置一个有识别度的线程名字。

RejectedExecutionHandler
线程池的饱和策略。
AbortPolicy 直接跑出异常,默认策略
CallerRunsPolicy 用调用者,所在的线程来执行任务
DiscardOldestPolicy 丢弃阻塞队列中最靠前的任务,并执行当前任务
DiscardPolicy 直接丢弃任务

扩展线程池
任务执行前后都会执行beforeExecute和afterExecute方法。

线程池的工作机制

如果当前运行的线程少于corePoolSize,则创建新线程来执行任务
如果如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue
如果无法将任务加入BlockingQueue(队列已满),则创建新的线程来处
理任务
如果创建新线程将使当前运行的线程超出maximumPoolSize,任务将被
拒绝,并调用RejectedExecutionHandler.rejectedExecution()方法

提交任务
execute提交不需要返回值的任务
submite提交有返回值的任务

关闭线程池
shutdown,shutdownNow
通常调用shutdown 方法来关闭线程池,如果任务不一定要执行完,
则可以调用shutdownNow 方法。
shutdownNow 首先将线程池的状态设置成STOP,然后尝试停止所有的正在执行
或暂停任务的线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

張義帥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值