Aplicación ThreadPoolExecutor

ThreadPoolExecutor JDK puede proporcionar el grupo de subprocesos. Puede colocar cosas en este grupo de subprocesos y dejar que se ejecute solo. Primero, veamos cómo definir un grupo de subprocesos:
Hay 7 parámetros:
public ThreadPoolExecutor (
int corePoolSize, el número de subprocesos centrales
int maximumPoolSize, el número máximo de subprocesos
long keepAliveTime, tiempo de vida, cuánto tiempo no ha funcionado el subproceso , devuelva la
unidad TimeUnit del sistema operativo , la unidad de tiempo de vida
BlockingQueue workQueue, la cola de tareas
ThreadFactory threadFactory, la fábrica de subprocesos
RejectedExecutionHandler la estrategia de rechazo del controlador
) { }

public class ThreadPoolDemo01 {
    
    

    static class Mytask implements Runnable {
    
    
        private int i;

        @Override
        public void run() {
    
    
            System.out.println("线程名字:" + Thread.currentThread().getName() + " Task i:" + i);
            try {
    
    
                System.in.read();  //线程阻塞在这里
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }

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

        @Override
        public String toString() {
    
    
            return "task{" +
                    "i=" + i +
                    '}';
        }
    }

    public static void main(String[] args) {
    
    

        //顺序:先执行 核心线程-任务队列-最大线程-拒绝策略
        ThreadPoolExecutor tpe = new ThreadPoolExecutor(
                2,   //核心线程数
                4, //最大线程数
                60,  //生存时间,线程很长时间没干活,请归还给操作系统
                TimeUnit.SECONDS,  //生存时间的单位
                new ArrayBlockingQueue<>(4), //任务队列
                Executors.defaultThreadFactory(),//线程工厂
                new ThreadPoolExecutor.CallerRunsPolicy());  //拒绝策略
        for (int i = 0; i < 7; i++) {
    
    
            tpe.execute(new Mytask(i));
        }
        System.out.println("任务队列:" + tpe.getQueue());
        // tpe.execute(new Mytask(100));
        //System.out.println(tpe.getQueue());
        tpe.shutdown();
    }
}

Orden de ejecución:
Primero, los subprocesos aparecen primero y mire el número requerido de subprocesos centrales. Si los subprocesos centrales no están llenos, ejecútelos directamente. Si los subprocesos centrales están llenos, colóquelos en la cola de espera. Si la cola está llena lleno, ejecutar directamente hasta que el número total de ejecuciones alcance el número máximo de subprocesos. Si la cola de espera y el subproceso máximo están llenos, se ejecutará la estrategia de rechazo

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/yanfei464486/article/details/112983785
Recomendado
Clasificación