zoukankan      html  css  js  c++  java
  • java线程池的实现机制

    原文链接:http://www.studyshare.cn/blog/details/1133/1

    java开发工具下载地址及安装教程大全,点这里。  

    更多技术好文,在这里

    一、java中提供的线程在开发中可能并不会直接使用,多线程编程场景使用java的线程池会更好,因为可以很好的管理线程,并且线程池内部的机制节省了我们自己创建和销毁线程的时间,效率上来讲更高。那么线程池内部实现的机制是怎样的呢?

    首先看一张图:


    线程池内部实现机制

    先解释每个元素的含义,然后整体总结机制

      1、BlockingQueue<Runnable>

            这是java jdk提供的阻塞队列,在这里是用来存放用户提交的任务

      2、corePool

            这是线程池中的核心线程,一个线程池中,首先使用这些核心线程去处理用户递交过来的任务

      3、maximumPool

            这是线程池中允许创建的最大的线程数

      4、RejectedExecutionHandler

            这是线程池提供的饱和策略,提供了四种策略,含义分别如下

            AbortPolicy:直接抛出异常,默认使用

            CallerRunsPolicy:使用调用者的线程执行任务

            DiscardPolicy:直接丢弃任务

            DiscardOldPolicy:丢弃最老的任务

        5、execute()

            该方法是线程池提供给外部调用的方法,使用者可通过调用该方法实现将任务交给线程池去执行

        搞明白以上内容的所有含义,下面分四步整体说明线程池的执行流程和机制:

        1、当外部的任务数提交到线程池中,任务数小于线程池的核心线程数的时候,就创建核心线程去执行任务

        2、当任务数大于等于核心线程数的时候,将任务存入阻塞队列

        3、当阻塞队列也已经存满了,则去创建新的线程来执行任务,但创建的新的线程数量不超过线程池的最大线程数

        4、如果任务队列满了,线程池的线程也达到了最大线程数,此时还有新的任务递交到线程池怎么办?

        5、使用饱和策略,具体使用哪种策略根据任务来确定,线程池默认是直接抛出异常

        以上就是线程池内部的具体实现机制。

    java开发工具下载地址及安装教程大全,点这里。  

    更多技术好文,在这里

  • 相关阅读:
    TYVJ1061 Mobile Service
    TYVJ1061 Mobile Service
    KMP 模板
    poj 3254 Corn Field
    poj 3254 Corn Field
    洛谷1279 字串距离
    poj 1041 John's trip——欧拉回路字典序输出
    bzoj 3033 太鼓达人——欧拉图搜索
    bzoj 2503 相框——思路
    bzoj 2935 [Poi1999]原始生物——欧拉回路思路!
  • 原文地址:https://www.cnblogs.com/darendu/p/10074654.html
Copyright © 2011-2022 走看看