zoukankan      html  css  js  c++  java
  • Spring线程池任务执行顺序测试

    package threadtest;
    
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    
    import java.util.concurrent.ThreadPoolExecutor;
    
    public class ThreadPoolTest {
    
        static class Worker extends Thread {
            private String name;
    
            public Worker() {
            }
    
            public Worker(String name) {
                super(name);
                this.name = name;
            }
    
            @Override
            public void run() {
                System.out.println("This is thread:" + name + " begin");
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("This is thread:" + name + " end");
            }
        }
    
        public static void main(String[] args) {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(1);
            executor.setQueueCapacity(48);
            executor.setMaxPoolSize(2);
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
            executor.initialize();
    
            for (int i=1; i<=50; i++) {
                executor.submit(new Worker("w" + i));
            }
            System.out.println(executor.getPoolSize());
        }
    
    }

    这里我们通过代码的方式新建一个线程池,然后CorePoolSize只设置1,然后设置了48大小的等待队列,最后将MaxPoolSize设置为2.

    我们的Worker线程需要10秒钟才能执行完毕,所以理论上应该同时执行Worker-1和Worker-50,而Woker-2到Worker-49都在队列里等待。

    运行结果如下,印证了我们的猜想。

  • 相关阅读:
    VUE网页loading加载状态
    VUE使用canvas画板实现签字
    一个完整的项目管理流程
    APP原型的设计步骤是什么?
    如何对接网建SMS短信通短信验证码接口
    如何彻底红蜘蛛,非常方便!!!
    如何在cmd中连接数据库
    mvn deploy:deploy-file命令
    Java线程池的分析和使用
    jstat命令详解
  • 原文地址:https://www.cnblogs.com/shuada/p/15707760.html
Copyright © 2011-2022 走看看