参考 http://www.importnew.com/19011.html 照猫画虎试用了 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/project/java-concurrency/executor.html 也写的不错