参考 http://www.importnew.com/19011… 照猫画虎试用了 java 的线程池
package me.zrj.test.test20170607; import java.util.Date; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; class MyTask implements Runnable { private int taskNum; public MyTask(int num) { this.taskNum = num; } public void run() { System.out.println((new Date()) + " starting task " + taskNum); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println((new Date()) + " task " + taskNum + " finished"); } } public class ThreadPoolTest20180211 { 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 myTask = new MyTask(i); executor.execute(myTask); System.out.println((new Date()) + " executor.getPoolSize() = " + executor.getPoolSize() + ", " + "executor.getQueue().size() = " + executor.getQueue().size() + ", " + "executor.getCompletedTaskCount() = " + executor.getCompletedTaskCount()); } executor.shutdown(); } }
输出如下:
Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 0 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 1, executor.getQueue().size() = 0, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 2, executor.getQueue().size() = 0, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 1 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 3, executor.getQueue().size() = 0, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 2 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 4, executor.getQueue().size() = 0, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 3 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 5, executor.getQueue().size() = 0, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 4 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 5, executor.getQueue().size() = 1, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 5, executor.getQueue().size() = 2, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 5, executor.getQueue().size() = 3, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 5, executor.getQueue().size() = 4, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 5, executor.getQueue().size() = 5, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 6, executor.getQueue().size() = 5, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 10 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 7, executor.getQueue().size() = 5, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 11 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 8, executor.getQueue().size() = 5, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 12 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 9, executor.getQueue().size() = 5, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 13 Sun Feb 11 17:27:47 GMT+08:00 2018 executor.getPoolSize() = 10, executor.getQueue().size() = 5, executor.getCompletedTaskCount() = 0 Sun Feb 11 17:27:47 GMT+08:00 2018 starting task 14 Sun Feb 11 17:27:51 GMT+08:00 2018 task 0 finished Sun Feb 11 17:27:51 GMT+08:00 2018 task 1 finished Sun Feb 11 17:27:51 GMT+08:00 2018 starting task 5 Sun Feb 11 17:27:51 GMT+08:00 2018 starting task 6 Sun Feb 11 17:27:51 GMT+08:00 2018 task 3 finished Sun Feb 11 17:27:51 GMT+08:00 2018 task 12 finished Sun Feb 11 17:27:51 GMT+08:00 2018 starting task 7 Sun Feb 11 17:27:51 GMT+08:00 2018 task 10 finished Sun Feb 11 17:27:51 GMT+08:00 2018 starting task 8 Sun Feb 11 17:27:51 GMT+08:00 2018 starting task 9 Sun Feb 11 17:27:51 GMT+08:00 2018 task 4 finished Sun Feb 11 17:27:51 GMT+08:00 2018 task 11 finished Sun Feb 11 17:27:51 GMT+08:00 2018 task 2 finished Sun Feb 11 17:27:51 GMT+08:00 2018 task 13 finished Sun Feb 11 17:27:51 GMT+08:00 2018 task 14 finished Sun Feb 11 17:27:55 GMT+08:00 2018 task 5 finished Sun Feb 11 17:27:55 GMT+08:00 2018 task 6 finished Sun Feb 11 17:27:55 GMT+08:00 2018 task 8 finished Sun Feb 11 17:27:55 GMT+08:00 2018 task 9 finished Sun Feb 11 17:27:55 GMT+08:00 2018 task 7 finished
另外参考这个 http://wiki.jikexueyuan.com/pr… 也写的不错