分析线程池源码测试线程池

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

/**
 * 线程池测试类
 */
public class TestThreadPool {
    public static void main(String[] args) {
        // 实例化线程池对象 corePoolSize--线程池的基本大小,maximumPoolSize--允许的最大线程数
        // KeepAliveTime 线程空闲时间
        // TimeUnit.MILLISECONDS 线程默认等待时间
        // new ArrayBlockingQueue<Runnable>(5)--阻塞队列,阻塞值为5
        ThreadPoolExecutor pool = new ThreadPoolExecutor(5,10,200, TimeUnit.MILLISECONDS,  new ArrayBlockingQueue<Runnable>(5));
        for (int i = 0; i < 14; i++){
            MyTask task = new MyTask(i);
            pool.execute(task);
            System.out.println("线程池中线程数目:"+pool.getPoolSize()+",队列中等待执行的任务数目:"+
                    pool.getQueue().size()+",已执行完别的任务数目:"+pool.getCompletedTaskCount());
        }
    }
}

/**
 * 自定义线程类
 */
class MyTask implements Runnable{
    private int num;
    public MyTask(int num){
        this.num = num;
    }
    @Override
    public void run() {
        System.out.println("正在执行任务:" + num);
        try {
            Thread.currentThread().sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("任务" + num + "执行完毕");
    }
}

猜你喜欢

转载自www.cnblogs.com/givre-foudre/p/12343544.html