【发布时间】:2019-08-21 21:52:56
【问题描述】:
Threadpoolexecutor 启动后可以改变它的阻塞队列吗?我在我的进程中使用了多个线程池执行器。我不想在我的进程中违反超过一定数量的最大线程数。这就是为什么我想到了将我的线程池的阻塞队列切换到更繁忙的阻塞队列的想法。但是我在 ThreadpoolExecutor 类中看不到任何提供切换阻塞队列的功能的函数。这背后的原因可能是什么?
【问题讨论】:
-
“这背后的原因是什么?”在设计时它不被认为是有用的功能。我不判断它是否真的有用。 (但大概这个功能可以在
BlockingQueue实现中处理,因此 TPE 也不需要处理它。) -
可能你需要使用公共池而不是多个读取池执行器。 docs.oracle.com/javase/8/docs/api/java/util/concurrent/…
-
@PratapiHemantPatel 这不是一个好的解决方案。我正在研究单体架构。不同的线程池用于写入不同的资源(socket、jms 和数据库)。如果我将使用相同的线程池来写入所有资源,那么可能是因为 db writes jms 事件会饿死。这不是一种理想的行为,因为订阅者正在等待 JMS 事件,而没有人会等待数据库写入。
标签: java concurrency threadpoolexecutor