这个问题是关于使用SingleThreadExecutor
(JDK 1.6)的后果。之前在这个论坛上也有过相关问题的提问和回答,但我相信我现在面临的情况,有点不同。
应用程序的各种组件(我们称之为组件 C1、C2、C3 等)生成(出站)消息,主要是为了响应它们从其他组件接收到的消息(入站)。这些出站消息保存在通常是ArrayBlockingQueue
实例的队列中 - 也许是相当标准的做法。但是,必须按照添加的顺序处理出站消息。我想使用 aSingleThreadExector
是显而易见的答案。我们最终会遇到 1:1 的情况 -一对一 SingleThreadExecutor
队列(专用于从一个组件发出的消息) 。
现在,组件的数量(C1、C2、C3...)在给定时刻是未知的。它们将根据用户的需要而存在(最终也将被处理掉)。我们说的是在峰值负载时有 200-300 个这样的组件。按照上述 1:1 的设计原则,我们将安排 200 SingleThreadExecutor
s。这是我在这里查询的来源。
我对必须创建这么多SingleThreadExecutor的想法感到不舒服。我宁愿尝试使用一个SingleThreadExecutor 池,如果这有意义并且是合理的(任何现成的,之前看到的类/模式?)。我已经阅读了很多关于SingleThreadExecutor
这里推荐使用的帖子,但是相同的池呢?
这里有学问的女人和男人是怎么想的?我希望得到指导、纠正或简单地警告:-)。