Java 线程池试用

参考 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… 也写的不错

Leave a Reply

Your email address will not be published. Required fields are marked *