首页 > 代码库 > 基于队列的线程池

基于队列的线程池

基于队列的线程池

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * Created by leizhimin on 2014/8/19.
 */
public class TestThreadPool {
    public static BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(300);

    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            queue.add(new TestThread("初始化"));
        }

        ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 3, 15, TimeUnit.SECONDS, queue);
        executor.execute(queue.poll());

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    queue.add(new TestThread("生产者"));
                    try {
                        Thread.currentThread().sleep(2000L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

class TestThread implements Runnable {
    public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private String name;        //创建者
    private Date addDate;       //添加到队列的日期

    TestThread(String name) {
        this.name = name;
        this.addDate = new Date();
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() +
                ":创建者=" + name + ",创建时间=" + sdf.format(addDate) + ",执行时间=" + sdf.format(new Date()));
        try {
            Thread.currentThread().sleep(1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


执行结果:

pool-1-thread-1:创建者=初始化,创建时间=2014-08-20 07:16:49,执行时间=2014-08-20 07:16:49
pool-1-thread-1:创建者=初始化,创建时间=2014-08-20 07:16:49,执行时间=2014-08-20 07:16:50
pool-1-thread-1:创建者=初始化,创建时间=2014-08-20 07:16:49,执行时间=2014-08-20 07:16:51
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:16:49,执行时间=2014-08-20 07:16:52
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:16:51,执行时间=2014-08-20 07:16:53
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:16:53,执行时间=2014-08-20 07:16:54
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:16:55,执行时间=2014-08-20 07:16:55
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:16:57,执行时间=2014-08-20 07:16:57
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:16:59,执行时间=2014-08-20 07:16:59
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:01,执行时间=2014-08-20 07:17:01
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:03,执行时间=2014-08-20 07:17:03
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:05,执行时间=2014-08-20 07:17:05
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:07,执行时间=2014-08-20 07:17:07
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:09,执行时间=2014-08-20 07:17:09
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:11,执行时间=2014-08-20 07:17:11
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:13,执行时间=2014-08-20 07:17:13
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:15,执行时间=2014-08-20 07:17:15
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:17,执行时间=2014-08-20 07:17:17
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:19,执行时间=2014-08-20 07:17:19
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:21,执行时间=2014-08-20 07:17:21
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:23,执行时间=2014-08-20 07:17:23
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:25,执行时间=2014-08-20 07:17:25
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:27,执行时间=2014-08-20 07:17:27
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:29,执行时间=2014-08-20 07:17:29
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:31,执行时间=2014-08-20 07:17:31
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:33,执行时间=2014-08-20 07:17:33
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:35,执行时间=2014-08-20 07:17:35
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:37,执行时间=2014-08-20 07:17:37
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:39,执行时间=2014-08-20 07:17:39
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:41,执行时间=2014-08-20 07:17:41
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:43,执行时间=2014-08-20 07:17:43
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:45,执行时间=2014-08-20 07:17:45
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:47,执行时间=2014-08-20 07:17:47
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:49,执行时间=2014-08-20 07:17:49
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:51,执行时间=2014-08-20 07:17:51
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:53,执行时间=2014-08-20 07:17:53
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:55,执行时间=2014-08-20 07:17:55
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:57,执行时间=2014-08-20 07:17:57
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:17:59,执行时间=2014-08-20 07:17:59
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:01,执行时间=2014-08-20 07:18:01
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:03,执行时间=2014-08-20 07:18:03
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:05,执行时间=2014-08-20 07:18:05
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:07,执行时间=2014-08-20 07:18:07
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:09,执行时间=2014-08-20 07:18:09
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:11,执行时间=2014-08-20 07:18:11
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:13,执行时间=2014-08-20 07:18:13
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:15,执行时间=2014-08-20 07:18:15
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:17,执行时间=2014-08-20 07:18:17
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:19,执行时间=2014-08-20 07:18:19
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:21,执行时间=2014-08-20 07:18:21
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:23,执行时间=2014-08-20 07:18:23
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:25,执行时间=2014-08-20 07:18:25
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:27,执行时间=2014-08-20 07:18:27
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:29,执行时间=2014-08-20 07:18:29
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:31,执行时间=2014-08-20 07:18:31
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:33,执行时间=2014-08-20 07:18:33
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:35,执行时间=2014-08-20 07:18:35
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:37,执行时间=2014-08-20 07:18:37
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:39,执行时间=2014-08-20 07:18:39
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:41,执行时间=2014-08-20 07:18:41
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:43,执行时间=2014-08-20 07:18:43
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:45,执行时间=2014-08-20 07:18:45
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:47,执行时间=2014-08-20 07:18:47
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:49,执行时间=2014-08-20 07:18:49
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:51,执行时间=2014-08-20 07:18:51
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:53,执行时间=2014-08-20 07:18:53
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:55,执行时间=2014-08-20 07:18:55
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:57,执行时间=2014-08-20 07:18:57
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:18:59,执行时间=2014-08-20 07:18:59
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:01,执行时间=2014-08-20 07:19:01
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:03,执行时间=2014-08-20 07:19:03
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:05,执行时间=2014-08-20 07:19:05
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:07,执行时间=2014-08-20 07:19:07
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:09,执行时间=2014-08-20 07:19:09
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:11,执行时间=2014-08-20 07:19:11
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:13,执行时间=2014-08-20 07:19:13
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:15,执行时间=2014-08-20 07:19:15
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:17,执行时间=2014-08-20 07:19:17
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:19,执行时间=2014-08-20 07:19:19
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:21,执行时间=2014-08-20 07:19:21
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:23,执行时间=2014-08-20 07:19:23
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:25,执行时间=2014-08-20 07:19:25
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:27,执行时间=2014-08-20 07:19:27
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:29,执行时间=2014-08-20 07:19:29
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:31,执行时间=2014-08-20 07:19:31
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:33,执行时间=2014-08-20 07:19:33
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:35,执行时间=2014-08-20 07:19:35
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:37,执行时间=2014-08-20 07:19:37
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:39,执行时间=2014-08-20 07:19:39
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:41,执行时间=2014-08-20 07:19:41
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:43,执行时间=2014-08-20 07:19:43
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:45,执行时间=2014-08-20 07:19:45
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:47,执行时间=2014-08-20 07:19:47
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:49,执行时间=2014-08-20 07:19:49
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:51,执行时间=2014-08-20 07:19:51
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:53,执行时间=2014-08-20 07:19:53
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:55,执行时间=2014-08-20 07:19:55
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:57,执行时间=2014-08-20 07:19:57
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:19:59,执行时间=2014-08-20 07:19:59
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:01,执行时间=2014-08-20 07:20:01
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:03,执行时间=2014-08-20 07:20:03
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:05,执行时间=2014-08-20 07:20:05
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:07,执行时间=2014-08-20 07:20:07
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:09,执行时间=2014-08-20 07:20:09
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:11,执行时间=2014-08-20 07:20:11
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:13,执行时间=2014-08-20 07:20:13
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:15,执行时间=2014-08-20 07:20:15
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:17,执行时间=2014-08-20 07:20:17
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:19,执行时间=2014-08-20 07:20:19
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:21,执行时间=2014-08-20 07:20:21
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:23,执行时间=2014-08-20 07:20:23
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:25,执行时间=2014-08-20 07:20:25
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:27,执行时间=2014-08-20 07:20:27
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:29,执行时间=2014-08-20 07:20:29
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:31,执行时间=2014-08-20 07:20:31
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:33,执行时间=2014-08-20 07:20:33
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:35,执行时间=2014-08-20 07:20:35
pool-1-thread-1:创建者=生产者,创建时间=2014-08-20 07:20:37,执行时间=2014-08-20 07:20:37


这个是理想情况,如果生产者创建速度大于消费者速度,则会随着时间推移耗尽系统资源,这个需要通过RejectedExecutionHandler来实现。



本文出自 “熔 岩” 博客,转载请与作者联系!