Java并发之线程池

线程池作用

  1. 提高响应速度。通过线程复用,避免频繁创建和销毁线程的性能开销;
  2. 限定线程资源使用上限,防止无限制创建线程,造成OOM;

线程池工作原理

  线程池的两个关键元素:线程数组和任务队列。线程池通过参数corePoolSize设置线程数量的下限,通过参数maximumPoolSize设置线程数量的上限,具体工作流程如下图所示:
这里写图片描述

线程池的参数配置

线程数量的设置:对于CPU密集型任务应尽可能少的线程数量,如配置Ncpu+1个线程的线程池。IO密集型任务则由于需要等待IO操作,线程并不是一直在执行任务,则配置尽可能多的线程,如2*Ncpu。

线程池的监控

  1. 通过线程池提供的参数进行监控。线程池里有一些属性在监控线程池的时候可以使用
    taskCount:线程池需要执行的任务数量。
    completedTaskCount:线程池在运行过程中已完成的任务数量。小于或等于taskCount。
    largestPoolSize:线程池曾经创建过的最大线程数量。通过这个数据可以知道线程池是否满过。如等于线程池的最大大小,则表示线程池曾经满了。
    getPoolSize:线程池的线程数量。如果线程池不销毁的话,池里的线程不会自动销毁,所以这个大小只增不减。
    getActiveCount:获取活动的线程数。
  2. 通过扩展线程池进行监控。通过继承线程池并重写线程池的beforeExecute,afterExecute和terminated方法,我们可以在任务执行前,执行后和线程池关闭前干一些事情。如监控任务的平均执行时间,最大执行时间和最小执行时间等。

参考:

  1. https://www.jianshu.com/p/87bff5cc8d8c
  2. http://ifeve.com/java-threadpool/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值