线程池1

任务类:

package com._ThreadPool;

public class MyTask implements Runnable {
    private int taskId;
    public MyTask(int id){
        this.taskId = id;
    }
    @Override
    public void run() {
        System.out.println("Mytask" + taskId +"开始执行 ");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Mytask" + taskId + "执行结束 ");
    }
}

线程池1:

package com._ThreadPool;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class MyExecutor {

    public static void main(String[] args) {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(5,10,200,TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));

        for(int i = 0 ;i < 15 ;i ++){
            MyTask task = new MyTask(i);
            executor.execute(task);
            System.out.println("线程池中的线程数量" + executor.getPoolSize()+
                "队列中等待的数目" + executor.getQueue().size() +
                "已经执行完的任务数目" + executor.getCompletedTaskCount());
        }

        executor.shutdown();
    }

}

结果:

Mytask0开始执行 
线程池中的线程数量1队列中等待的数目0已经执行完的任务数目0
线程池中的线程数量2队列中等待的数目0已经执行完的任务数目0
Mytask1开始执行 
线程池中的线程数量3队列中等待的数目0已经执行完的任务数目0
Mytask2开始执行 
线程池中的线程数量4队列中等待的数目0已经执行完的任务数目0
Mytask3开始执行 
线程池中的线程数量5队列中等待的数目0已经执行完的任务数目0
Mytask4开始执行 
线程池中的线程数量5队列中等待的数目1已经执行完的任务数目0
线程池中的线程数量5队列中等待的数目2已经执行完的任务数目0
线程池中的线程数量5队列中等待的数目3已经执行完的任务数目0
线程池中的线程数量5队列中等待的数目4已经执行完的任务数目0
线程池中的线程数量5队列中等待的数目5已经执行完的任务数目0
线程池中的线程数量6队列中等待的数目5已经执行完的任务数目0
Mytask10开始执行 
线程池中的线程数量7队列中等待的数目5已经执行完的任务数目0
Mytask11开始执行 
线程池中的线程数量8队列中等待的数目5已经执行完的任务数目0
Mytask12开始执行 
线程池中的线程数量9队列中等待的数目5已经执行完的任务数目0
Mytask13开始执行 
线程池中的线程数量10队列中等待的数目5已经执行完的任务数目0
Mytask14开始执行 
Mytask0执行结束 
Mytask5开始执行 
Mytask3执行结束 
Mytask14执行结束 
Mytask13执行结束 
Mytask11执行结束 
Mytask1执行结束 
Mytask2执行结束 
Mytask10执行结束 
Mytask4执行结束 
Mytask12执行结束 
Mytask9开始执行 
Mytask8开始执行 
Mytask7开始执行 
Mytask6开始执行 
Mytask5执行结束 
Mytask7执行结束 
Mytask6执行结束 
Mytask8执行结束 
Mytask9执行结束 

Process finished with exit code 0

首先填满核心线程数,然后填满队列,然后填满最大线程数。

猜你喜欢

转载自www.cnblogs.com/da-peng/p/9821709.html