【问题标题】:How newCachedThreadPool reuses threads?newCachedThreadPool 如何复用线程?
【发布时间】:2012-08-17 19:26:43
【问题描述】:

javadoc 说Executors.newCachedThreadPool 返回的服务重用了线程。这怎么可能? 一个线程只能通过调用start 启动一次。那么他们是如何实现的呢?该服务的线程在无限循环中运行,并且它们的Runnable-s 被按需替换?

【问题讨论】:

    标签: java multithreading executorservice


    【解决方案1】:

    一个 Runnable 可以调用另一个 Runnable。

    每个线程只运行一个主 Runnable,但该 Runnable 从共享的 BlockingQueue 中获取 Runnables 并调用它们,直到它被关闭。

    简化了。

    final BlockingQueue<Runnable> queue = ...
    
    Runnable runs = new Runnable() { public void run() {
        while(running)
            queue.take().run();
    }};
    

    您可以阅读代码以了解它是如何实现的。

    【讨论】:

    • 我可能已经猜到了……签名也暗示了这个功能。
    猜你喜欢
    • 2015-06-19
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多