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都在队列里等待。

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

原文地址:https://www.cnblogs.com/shuada/p/15707760.html