zoukankan      html  css  js  c++  java
  • 线程池工作流程-验证

    线程池工作流程:

      1、如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务

      2、如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列

      3、如果这时候队列满了,而且正在运行的线程数量小于 maximumPoolSize,那么还是要创建非核心线程立刻运行这个任务

      4、如果队列满了,而且正在运行的线程数量大于或等于 maximumPoolSize,那么默认拒绝策略下线程池会抛出异常RejectExecutionException

    实验:拒绝策略 设置默认的 AbortPolicy,另外三种拒绝策略略

    public class ThreadPoolTest1 {

    public static void main(String[] args) throws InterruptedException {
    Runnable runnable = new Runnable() {
    @SneakyThrows
    @Override
    public void run() {
    System.out.println(Thread.currentThread().getName()+"--"+System.currentTimeMillis());
    Thread.sleep(1000);
    }
    };

    ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 2, 5, TimeUnit.SECONDS,
    new LinkedBlockingQueue<>(5), new ThreadPoolExecutor.AbortPolicy());
    System.out.println("核心线程数:"+pool.getCorePoolSize());
    System.out.println("最大线程数:"+pool.getMaximumPoolSize());
    System.out.println("线程池大小:"+pool.getPoolSize());
    System.out.println("队列大小:"+pool.getQueue().size());
    System.out.println("################################");

    for (; ; ) {
    pool.submit(runnable);
    Thread.sleep(100);
    System.out.println("核心线程数:"+pool.getCorePoolSize());
    System.out.println("最大线程数:"+pool.getMaximumPoolSize());
    System.out.println("线程池大小:"+pool.getPoolSize());
    System.out.println("队列大小:"+pool.getQueue().size());
    System.out.println("-----------------------------------");
    }
    }

    }


    实验结果:

    Connected to the target VM, address: '127.0.0.1:5168', transport: 'socket'
    核心线程数:1
    最大线程数:2
    线程池大小:0
    队列大小:0
    ################################
    pool-1-thread-1--1595947653191
    核心线程数:1
    最大线程数:2
    线程池大小:1
    队列大小:0
    -----------------------------------
    核心线程数:1
    最大线程数:2
    线程池大小:1
    队列大小:1
    -----------------------------------
    核心线程数:1
    最大线程数:2
    线程池大小:1
    队列大小:2
    -----------------------------------
    核心线程数:1
    最大线程数:2
    线程池大小:1
    队列大小:3
    -----------------------------------
    核心线程数:1
    最大线程数:2
    线程池大小:1
    队列大小:4
    -----------------------------------
    核心线程数:1
    最大线程数:2
    线程池大小:1
    队列大小:5
    -----------------------------------
    pool-1-thread-2--1595947653791
    核心线程数:1
    最大线程数:2
    线程池大小:2
    队列大小:5
    -----------------------------------
    Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@38082d64 rejected from java.util.concurrent.ThreadPoolExecutor@5f2050f6[Running, pool size = 2, active threads = 2, queued tasks = 5, completed tasks = 0]
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
    at com.heeexy.example.test.multithread.threadPool.ThreadPoolTest1.main(ThreadPoolTest1.java:30)
    pool-1-thread-1--1595947654191
    pool-1-thread-2--1595947654793
    pool-1-thread-1--1595947655191
    pool-1-thread-2--1595947655793
    pool-1-thread-1--1595947656191

    制定计划、物质驱动、立即执行、反复提醒、阶段反馈、输出博客
  • 相关阅读:
    vue打包---放到服务器下(一个服务器多个项目需要配置路径),以及哈希模式和历史模式的不同配置方法
    承诺----异步函数---封装一个函数,使用承诺得到返回值(原本三个参数,使用前两个参数发送请求,得到第三个参数想要的结果,但是在函数外部拿不到第三个参数的值,所以改为两个参数,用承诺来获取第三个参数)
    双层拖拽事件,用鼠标画矩形,拖动右下角可以再次改变矩形大小,方案一 有BUG
    axios 使用方法 以及服务器端 设置拦截发送404状态的提示语,当网络错误时候返回前端的提示, 当网络正常的时候返回后端的提示
    异步async await 相关知识点总结以及代码练习
    vue+div.canvas图像标注功能实现
    Django与Ajax
    项目园
    Django 路由层与视图层
    Bootstrap框架如何设置导入链接
  • 原文地址:https://www.cnblogs.com/wxseng/p/13394427.html
Copyright © 2011-2022 走看看