线程池底层原理

1、线程池底层原理架构图

image

2、线程池主要处理流程图

image

3、线程池主要处理流程解释(重要)

    1. 在创建了线程池后,等待提交过来的任务请求。
    2. 当调用execute()方法添加一个任务请求,线程池会做如下判断: 
      2.1 如果正在运行的线程数小于corePoolSize,那么马上会创建线程运行这个任务; 
      2.2 如果正在运行的线程数大于或者等于corePoolSize,那么会将这个任务放入队列; 
      2.3 如果这时候队列满了并且正在运行的线程数量还小于maximumPoolSize,那么还是要创建非核心线程运行这个任务; 
      2.4 如果队列满了并且线程数大于或者等于maximumPoolSize,那么会启动饱和拒绝策略来执行
    3. 当一个线程完成时,它会从队列中取下一个任务来执行。
    4. 当一个线程无事可做,且超过一定的时间(keepAliveTime)时,线程池会判断: 
      如果当前运行的线程数大于corePoolSize,那么这个线程会停掉。 
      所以线程池的所有任务完成后,它最终会收缩到corePoolSize的大小。
posted @ 2019-09-20 20:58  要好好吃饭  阅读(218)  评论(0编辑  收藏  举报