多线程之ThreadPoolExecutor(一张图带你走进ThreadPoolExecutor的世界)


highlight: androidstudio

ThreadPoolExecutor参数以及原理图解

参数释义

  • corePoolSize控制核心线程池的大小

  • maximumPoolSize 线程池最大线程数量

  • keepAliveTime 当某个线程超过生存时间(没任务待执行)后则会回归还操作系统;

  • TimeUnit.SECONDS keepAliveTime 的单位;

  • BlockingQueue 任务队列,用于存放Runnable即任务

  • ThreadFactory 用于创建线程,以及指定线程的前缀(一般用于定位问题)和group以及是否为守护线程(优先级最低的,默认是非守护线程)

    ``` 什么是守护线程???

    有时候,你希望创建一个线程来执行一些辅助工作,但又不希望这个线程阻碍 JVM 的关闭。
    在这种情况下就需要使用守护线程( Daemon Thread )。
    线程可分为两种:普通线程和守护线程。在 JVM 启动时创建的所有线程中,
    除了主线程以外,其他的线程都是守护线程(例如垃圾回收器以及其他执行辅助工作的线程)。
    当创建一个新线程时,新线程将继承创建它的线程的守护状态,因此在默认情况下,主线程创建的所有线程都是普通线程。
    普通线程与守护线程之间的差异仅在于当线程退出时发生的操作。当一个线程退出时, 
    JVM 会检查其他正在运行的线程,如果这些线程都是守护线程,那么 JVM 会正常退出操作。
    当 JVM 停止时,所有仍然存在的守护线程都将被抛弃, 且不会执行 finally 代码块,JVM 将直接退出。
    我们应尽可能少地使用守护线程 ― 很少有操作能够在不进行清理的情况下被安全地抛弃。特别是,
    如果在守护线程中执行可能包含 I/O操作的任务,
    那么将是一种危险的行为。守护线程最好用于执行“内部”任务,
    例如周期性地从内存的缓存中移除逾期的数据。

    ```

  • 拒绝策略 拒绝策略 ,当线程池满了的时候,使用的拒绝方式,具体见下图中

一张图带你走进ThreadPoolExecutor的世界

线程池工作原理演示 (2).png

下面我们看下jdk中已经为我们定义好的线程池工具类 Executors,他其实也是各种 new ThreadPoolExecutor(); 只不过细分了一下。

Executors框架提供的几种线程池简介

在介绍前 有必要了解下java中的阻塞队列</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值