概念:

 

线程池的流程

执行流程:

  当我们设置第一个参数corePoolSize=5说明是核心线程为5个,当线程数超过核心线程数时会先放进LonkedBlockingDeque队列中,

  MaxinumPoolSize指的是线程池最大的线程数,当LinkedBlockingDeque队列中数量已满时,才会在放进线程池中,此时线程池线程数量一定大于核心线程数。

  KeepAliveTime指的是回收策略,当为线程执行谁先超过60s就回收一定程度上保持线程池的核心数量,前提是线程池中的线程数超过核心数量

  LinkedBliockingDeque指的是队列,当线程池的核心线程数量达到时,会先存放进队列中等待核心线程执行完毕在进入线程,当队列也满时才会在放进线程池中。当线程池也满了就会执行BlockingQueue<Runnable> workBlocQueue拒绝策略。

  BlockingQueue<Runnable> workBlocQueue:指的是拒绝策略,当核心线程池满了,队列也满了,线程池最大数量也满了就会拒绝在创建线程放进线程池。

代码演示:

package cn.lgy.thread;

import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 使用线程池
 */
public class ThreadText02 {

    static class TxThread implements Runnable{

        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+":  执行业务逻辑");
        }
    }

    public static void main(String[] args) {
//        创建一个线程池
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
          5,//参数 int corePoolSize
          10,//参数 int maximulPoolSize 60l,//参数 Long KeepAliveTime TimeUnit.SECONDS,//参数TimeUnit unit new LinkedBlockingDeque<>(5));//参数 BlockingQueue<Runnable> workQueue for (int i = 0; i < 15; i++) { threadPoolExecutor.execute(new TxThread()); } threadPoolExecutor.shutdown(); } }

  

 

posted on 2020-08-07 00:03  ¥简竹¥  阅读(123)  评论(0编辑  收藏  举报