美文网首页
线程池实现原理

线程池实现原理

作者: 拼搏小老鼠 | 来源:发表于2018-02-03 12:11 被阅读0次

一 线程池优点

1、线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,重复利用提升使用效率。

2、因为重复利用之前创建的线程,加快了响应时间及速度。

3、方便调优与统一管理,如可根据系统的承受能力,调整线程池中工作线程的数量。

二 线程池实现原理

 当一个任务通过线程池的execute(Runnable)方法添加到线程池时,其执行流程如下图所示:

1  当线程池中的数量小于corePool时,即使线程池中的线程都处于空闲状态,也会创建新的线程来处理被添加的任务。

2  当线程池中的数量等于 corePool时,但是缓冲队列 BlockingQueue未满,那么任务被放入缓冲队列。

3  当线程池中的数量大于corePool时,且缓冲队列BlockingQueue满,且线程池中的数量小于maximumPool时,在maximumPool新建线程来处理被添加的任务。

4 当线程池中的数量大于corePool,缓冲队列BlockingQueue满,并且线程池中的数量等于maximumPool时,那么通过RejectedExecutionHandler策略来处理此任务。也就是:处理任务的优先级为:核心线程corePool、任务队列BlockingQueue、最大线程maximumPool,如果三者都满了,使用RejectedExecutionHandler处理被拒绝的任务。 拒绝策略的四种实现,如上图所示。

三 拒绝策略及实例

JAVA提供了4种拒绝策略,默认配置是AbortPolicy。下面是详细解释:

1、AbortPolicy:直接抛出异常。

2、CallerRunsPolicy:不使用线程池执行任务,而是通过调用所在的(当前的)线程运行任务。

3、DiscardOldestPolicy:丢弃队列里最旧的一个任务,并将当前任务加入线程池以待执行。

4、DiscardPolicy:不处理,丢弃掉。

下面以AbortPolicy策略为例进行说明,其它情况类似。

public class AbortPolicyTest { 

 public static void main(String[] args) { 

 int corePoolSize = 5; 

 int maxPoolSize = 10; 

 long keepAliveTime = 5; 

 BlockingQueuequeue = new LinkedBlockingQueue(10);

 RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();

 ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize,

                maxPoolSize, keepAliveTime, TimeUnit.SECONDS, queue, handler);

        for (int i = 0; i < 50; i++) {

            executor.execute(new Worker());

        }

        executor.shutdown();

    }

    private static class Worker implements Runnable {

        public void run() {

            System.out.println(Thread.currentThread().getName() +

                " is running");

        }

    }

}

此程序会抛出java.util.concurrent.RejectedExecutionException异常。


分享人:Gallen

相关文章

  • 源码分析AsyncTask的工作原理

    一、AsyncTask原理介绍 AsyncTask的实现原理 = 线程池+ Handler 其中:线程池用于线程调...

  • 线程以及java线程池实现分享

    线程以及java线程池实现分享 线程简介 JDK线程池的工作原理 JDK线程池的实现细节 1.线程简介-由来 1....

  • 美团一面总结

    线程池的实现原理 参考: Java线程池实现原理及其在美团业务中的实践[https://tech.meituan....

  • ThreadPoolExecutor线程池原理

    本文参考Java线程池---addWorker方法解析Java线程池ThreadPoolExecutor实现原理线...

  • 线程池的原理

    参考 深入Java源码理解线程池原理 线程池是对CPU利用的优化手段 线程池使用池化技术实现,替他的实现还有连接池...

  • 一文搞懂Java线程池原理之ThreadPoolExecutor

    在工作中,我们经常使用线程池,但是你真的了解线程池的原理吗?同时,线程池工作原理和底层实现原理也是面试经常问的考题...

  • 并发编程(三)-线程池与Future

    1. 线程池的实现原理 下图所示为线程池的实现原理:调用方不断地向线程池中提交任务;线程池中有一组线程,不断地从队...

  • 多线程调用接口并拿到返回值

    原理:开启线程,并实现Callable接口一、线程池 二、代码执行 三、线程

  • 线程池ThreadPoolExecutor

    主要内容 ThreadPoolExecutor继承关系 实现原理线程池状态线程池的创建任务提交 前言 说到创建线程...

  • 线程池

    线程池的实现原理当向线程池提交一个任务之后,线程池是如何处理这个任务呢?(1)线程池判断核心线程池里的线程是否都在...

网友评论

      本文标题:线程池实现原理

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