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