import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class Test1 { public static void main(String[] args) { // ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(); // ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(10); // ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newSingleThreadExecutor(); // ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newScheduledThreadPool(10); // ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newWorkStealingPool(); ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(5)); for (int i = 0; i <= 15; i++) { MyTask myTask = new MyTask(i + 1); executor.execute(myTask); System.out.println("線程池中線程數目:" + executor.getPoolSize() + ",隊列中等待執行的任務數目:" + executor.getQueue().size() + ",已執行完別的任務數目:" + executor.getCompletedTaskCount()); } executor.shutdown(); } } class MyTask implements Runnable { private int taskNum; public MyTask(int num) { this.taskNum = num; } @Override public void run() { System.out.println("正在執行task" + taskNum); try { Thread.currentThread().sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("task" + taskNum + "執行完畢"); } }