线程池

作者: yinhaijun | 来源:发表于2019-06-10 17:35 被阅读0次

    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

    相关文章

      网友评论

          本文标题:线程池

          本文链接:https://www.haomeiwen.com/subject/bogzxctx.html