java - 线程池

new Thread 弊端

  1. 每次new Thread新建对象,性能差;
  2. 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者 OOM;
  3. 缺少更多功能,如更多执行、定期执行、线程中断。

线程池的好处

  1. 重用存在的线程,减少对象创建、消亡的开销,性能差;
  2. 可有效性控制最大并发线程数,提高系统资源利用率,同事可以避免过多资源竞争,避免阻塞;
  3. 提供定时执行、定期执行、单线程、并发数控制等功能;

1 线程池 — ThreadPoolExecutor核心参数

  1. corePoolSize: 核心线程数量;
  2. maximumPoolSize: 线程最大线程数;
  3. workQueue; 阻塞队列,存储等待执行的任务,很重要,会对线程池运行过程产生重大影响;
  4. keepAliveTime:线程没有任务执行时做多保持多久时间终止;
  5. unit:keepAliveTime的时间单位;
  6. threadFactory: 线程工厂,用来创建线程;
  7. rejectHandler: 当拒绝处理任务时的策略;

2 线程池 — ThreadPoolExecutor核心方法

  1. executer():提交任务,交给线程池执行;
  2. submit():提交任务,能够返回执行结果 execute+ Future;
  3. shutdown():关闭线程池,等待任务都执行完;
  4. shutdownNow():关闭线程池,不等待任务执行完;
  5. getTaskCount():线程池已执行和未执行的任务总数;
  6. getCompletedTaskCount():已完成的任务数量;
  7. getPoolSize():线程池当前的线程数量;
  8. getActiveCount():当前线程池中正在执行任务的线程数量;

3 线程池 — 合理配置

  1. CPU密集型任务,就需要尽量压榨CPU,参考值可以设为 NCPU + 1;
  2. I/O密集型任务,参考值可以设置为 2 * NCPU;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值