java - newCachedThreadPool 是如何复用线程的?

标签 java multithreading executorservice

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

最佳答案

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

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

简化了它。

final BlockingQueue<Runnable> queue = ...

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

您可以阅读代码以了解它是如何真正做到的。

关于java - newCachedThreadPool 是如何复用线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12071999/

相关文章:

java - 执行器中的 Thread.join() 等效项

java - 获取 java.sql.SQLException : Operation not allowed after ResultSet closed

java - 如何计算索引json android的值

python - 使用python控制线程中的循环

使用 Executor 的 JavaFX 应用程序在退出时挂起

java - 如何让 ExecutorService 创建 n 个线程执行完全相同的任务?

java - 在我的代码中找不到 java.io.OptionalDataException 的原因

java - 无法让 Maven 识别 Java 1.8

java - 事件调度线程同步

c++ - C中的多线程-WINAPI