public class ThreadPool { public static void main(String[] args) { ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5,10,2, TimeUnit.SECONDS,new ArrayBlockingQueue<>(5)); for (int i=0;i<15;i++){ poolExecutor.execute(new Task(i)); System.out.println("线程池中线程数目:"+poolExecutor.getPoolSize()+",队列中等待执行的任务数目:"+ poolExecutor.getQueue().size()+",已执行完成的任务数目:"+poolExecutor.getCompletedTaskCount()); } for(;;) { try { //if (taskNum < 10) { Thread.currentThread().sleep(3000); //} } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程池中线程数目:" + poolExecutor.getPoolSize() + ",队列中等待执行的任务数目:" + poolExecutor.getQueue().size() + ",已执行完成的任务数目:" + poolExecutor.getCompletedTaskCount()); } //poolExecutor.shutdown(); } } class Task implements Runnable { private int taskNum; public Task(int taskNum){ this.taskNum = taskNum; } @Override public void run() { System.out.println("正在执行task "+taskNum); try { //if (taskNum < 10) { Thread.currentThread().sleep(4000); //} } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("task "+taskNum+"执行完毕"); } }
输出:
正在执行task 0
线程池中线程数目:1,队列中等待执行的任务数目:0,已执行完成的任务数目:0
正在执行task 1
线程池中线程数目:2,队列中等待执行的任务数目:0,已执行完成的任务数目:0
线程池中线程数目:3,队列中等待执行的任务数目:0,已执行完成的任务数目:0
正在执行task 2
线程池中线程数目:4,队列中等待执行的任务数目:0,已执行完成的任务数目:0
正在执行task 3
线程池中线程数目:5,队列中等待执行的任务数目:0,已执行完成的任务数目:0
正在执行task 4
线程池中线程数目:5,队列中等待执行的任务数目:1,已执行完成的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:2,已执行完成的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:3,已执行完成的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:4,已执行完成的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:5,已执行完成的任务数目:0
线程池中线程数目:6,队列中等待执行的任务数目:5,已执行完成的任务数目:0
正在执行task 10
线程池中线程数目:7,队列中等待执行的任务数目:5,已执行完成的任务数目:0
正在执行task 11
线程池中线程数目:8,队列中等待执行的任务数目:5,已执行完成的任务数目:0
正在执行task 12
线程池中线程数目:9,队列中等待执行的任务数目:5,已执行完成的任务数目:0
正在执行task 13
线程池中线程数目:10,队列中等待执行的任务数目:5,已执行完成的任务数目:0
正在执行task 14
线程池中线程数目:10,队列中等待执行的任务数目:5,已执行完成的任务数目:0
task 1执行完毕
task 3执行完毕
task 11执行完毕
task 10执行完毕
task 4执行完毕
task 2执行完毕
task 0执行完毕
task 14执行完毕
task 12执行完毕
task 13执行完毕
正在执行task 9
正在执行task 8
正在执行task 7
正在执行task 6
正在执行task 5
线程池中线程数目:5,队列中等待执行的任务数目:0,已执行完成的任务数目:10
task 9执行完毕
task 6执行完毕
task 7执行完毕
task 8执行完毕
task 5执行完毕
线程池中线程数目:5,队列中等待执行的任务数目:0,已执行完成的任务数目:15
线程池中线程数目:5,队列中等待执行的任务数目:0,已执行完成的任务数目:15
原文:https://www.cnblogs.com/lanqi/p/11585159.html