java 线程池

线程池作用

  1. 降低资源消耗,通过重复利用已创建的线程,降低线程创建和销毁造成的资源消耗。
  2. 提高线程的可管理性。线程是稀缺资源,如果无限的创建,不仅会消耗系统的资源,还会降低系统的稳定性,使用线程池可以统一的分配,调优和监控。

创建线程池

Executors创建

  1. newCachedThreadPool
  2. newFixedThreadPool
  3. newScheduledThreadPool
  4. newSingleThreadExecutor

使用ThreadPoolExecutor创建

阿里开发手册推荐方式,可以更好的理解线程池的主要组成,更能根据业务配置合适的线程池。

线程池的主要组成

  1. corePoolSize: 核心线程数,线程池工作的线程数量,未达到数量时,无论是否有空闲线程,都去创建一个线程。
  2. maximumPoolSize: 最大线程数,线程池润许创建的最大线程数量。
  3. keepAliveTime: 线程最大空闲时间,当线程空闲达到指定时间后,回收线程。
  4. unit: 空闲时间单位。
  5. workQueue: 工作队列,等待的任务存放的队列。
  6. threadFactory: 线程工厂,可以自定义实现创建线程的规则。
  7. handler: 拒绝策略,当线程池无法执行任务时,怎么去处理该任务。
    • DiscardPolicy: 不进行处理。
    • DiscardOldestPolicy: 把队列中最早的删除,执行当前任务。
    • AbortPolicy: 抛出异常。
    • CallerRunsPolicy: 主线程处理。
    • 自定义:实现RejectedExecutionHandler接口即可。
    public class MyRunsPolicy implements RejectedExecutionHandler {
        public MyRunsPolicy () { }
    
        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
           // 此处按照自己的业务处理即可
        }
    }
    

线程池的工作流程

线程池工作流程

线程池如何复用线程

这也是我好奇的原因,像其他组件,就算不需要看代码,也能大致想到怎样实现的,但是线程池我一直认为很复杂,没想出来,所以打开源代码查看,结果大吃一惊,只是在线程中直接调用线程的run方法。。。我giao!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值