線程池1
阿新 • • 發佈:2018-10-20
線程數 mil size cep public inter div pool private
任務類:
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
首先填滿核心線程數,然後填滿隊列,然後填滿最大線程數。
線程池1