執行緒池1
阿新 • • 發佈:2018-11-09
任務類:
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
首先填滿核心執行緒數,然後填滿佇列,然後填滿最大執行緒數。