线程池

Executors提供的4种线程池

    Executor executorSingle = Executors.newSingleThreadExecutor();//返回一个线程
    Executor executorFixed = Executors.newFixedThreadPool(4);//返回固定数量的线程池
    Executor executorCached = Executors.newCachedThreadPool();//不限制最大线程数量,线程空闲后会被回收
    Executor executorScheduled = Executors.newScheduledThreadPool(4);//延迟执行

它们的核心构造器是ThreadPoolExecutor.java,所以了解了ThreadPoolExecutor就是了解了线程池的原理,如图所示

image.png

一个任务对应一个worker,核心线程足够的时候,优先使用核心线程执行,如果不够,加入阻塞队列中(用take方法依次执行),如果阻塞队列不够了,则启用最大线程(类似于临时工,这个是可以设置销毁的时间的),如果还不够,则执行RejectedExecutionHandler拒绝策略,这个需要开发自行去实现代码,对应到图中1、2、3、4步骤
如何合理配置线程池的参数
主要说下核心线程池的数量,首先分析当前任务的性质,是属于CPU密集型,还是IO密集型,
CPU密集型:每次任务时间短、任务量大
IO密集型:每次任务时间长、任务量一般
CPU密集型一般配置的CPU数量+1个核心线程

img
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java线程池 [toc] 什么是线程池 线程池就是有N个子线程共同在运行的线程组合。 举个容易理解的例子:有个线...
    石家志远阅读 5,148评论 0 6
  • 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因...
    CatalinaX阅读 2,833评论 0 2
  • 职场的每一个阶段都有艰难的时刻,自带技能跟不上要打怪升级,上下关系理不顺要打通障碍墙,陷入死循环在怪现象里转圈要重...
    七十二朵云阅读 2,669评论 0 1
  • 朋友最近经常给我打电话,倾诉她的烦恼,她说她已经抑郁了,陷在是否离婚的矛盾里不能自拔。离吧,怕孩子受罪,不离,实在...
    王双凤阅读 1,877评论 1 3

友情链接更多精彩内容