关于线程池的线程复用

之前接触到线程池之后,对线程复用很感兴趣。但是,线程执行完后就会销毁,那么线程的复用又是如何实现的呢?

最近在网上找了一下相关资料,发现了一篇文章讲解的比较浅显易懂,根据该文章的思路,自己自由发挥了一下,估计大概应该就是这么个意思吧。

BlockingQueue<Runnable> runnableQueue = new ArrayBlockingQueue<Runnable>(100);
        Runnable target = new Runnable() {
            @Override
            public void run() {
                for (;;) {
                    if (!runnableQueue.isEmpty()) {
                        Runnable runnable = runnableQueue.poll();
                        if (runnableQueue != null) {
                            runnable.run();
                        }
                    }
                }
            }
        };
        Thread thread = new Thread(target);
        runnableQueue.put(new Runnable() {
            @Override
            public void run() {
                System.out.println("first");
            }
        });

        runnableQueue.put(new Runnable() {
            @Override
            public void run() {
                System.out.println("second");
            }
        });

        thread.start();

        runnableQueue.put(new Runnable() {
            @Override
            public void run() {
                System.out.println("third");
            }
        });

Runnable被提交进任务队列中,线程反复检测队列中是否有可执行任务,若有则执行出队操作,并在自己的run方法中调用任务的run方法。

原文地址:https://www.cnblogs.com/wxdmw/p/14023031.html