自定义线程

发布时间 2023-12-03 21:59:50作者: 林浅
package org.example.test2;

import java.util.concurrent.*;

public class CustomeThread {
    public static void main(String[] args) {
        ExecutorService  threadPool = new ThreadPoolExecutor(
                10,
                20,
                0L,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(10),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
        class MyTask implements  Runnable{
            int i =0;

            public MyTask(int i) {
                this.i = i;
            }

            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"程序员做第"+i+"个项目");
                try {
                    Thread.sleep(3000L);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        try {
            for (int i = 0; i < 100; i++) {
                MyTask myTask = new MyTask(i);
                threadPool.execute(myTask);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            threadPool.shutdown();
        }
    }
}

线程创建的时候按  核心线程-->阻塞线程-->最大线程

线程执行的时候按  核心线程-->最大线程-->阻塞线程

所以代码执行结果先执行1-10个项目 然后执行11-30个项目 其中11-20个项目是阻塞线程的 所以最后执行