java - 并发-如何使其排队而不被拒绝?

标签 java multithreading concurrency threadpool

使用用户sjlee在这里给出的答案Impossible to make a cached thread pool with a size limit?

用代码

new ThreadPoolExecutor(100, // core size
    10000, // max size
    1000, // idle timeout
    TimeUnit.MILLISECONDS,
    new LinkedBlockingQueue<Runnable>(Integer.MAX_SIZE)); // queue with a size

如果任务数量超过 coreSize 100 * queueSize 20 个,线程数量将会增加,直到达到最大大小。

好的。

但问题是,假设一切都完成了,没有更多的任务,线程数量不会减少。

如何让Executor在线程全部空闲时将其数量减少到0?

接下来,如何让 Executor 将 extras 排队以便稍后运行?

最佳答案

您可以使用allowCoreThreadTimeOut(true)来使核心线程在超时时终止。

关于java - 并发-如何使其排队而不被拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45778936/

相关文章:

java - 获取deeplearning4j java中每一层的输入和输出大小

c++ - 对自己的互斥锁类使用lock_guard

android - NDK c++ std::thread 在加入时中止崩溃

c - 异步返回尚未完全 "set up"(或已处理)的结果(作为结构)的最佳方法是什么

java - 从同步方法调用同步方法的同步成本是多少?

java - Java ESAPI 中的编码

java - 为什么在 `(.+?)`后面加一个空格就可以完全改变结果

java - Google 应用程序引擎,未通过推送部署进行部署

c - 将多个值返回到C中的线程时出错

concurrency - 为什么这个程序不能使用 goroutine 打印任何东西?