【发布时间】:2013-03-30 23:29:04
【问题描述】:
我有 4-5 个工作线程处理大型消息队列。而且我还有另一段代码使用 2-3 个工人运行。我想在处理大型消息队列时阻止所有其他工作人员。
我使用的是 JDK 6 和 Jms
编辑:
队列进程工作者从未终止。当没有消息时,他们阻塞在队列中。这些工人由执行线程池管理。如果我使用读写锁,这些工人之一也会被阻塞。 此外,如果使用循环屏障,那么我必须终止线程以释放阻塞的第二个进程。由于工作线程由线程池管理,因此不能保证所有工作线程都会忙于处理消息。
告诉我,
final ExecutorService executor = getExecutorManager().getExecutor();
for (int i = 0; i < threadPoolSize; i++) {
executor.submit(new MessageWorker(qConn));
}
以下是第二个模块,我希望在队列处理器工作线程工作时阻止所有工作人员。
final ExecutorService executor = getExecutorManager().getExecutor();
for (int i = 0; i < threadPoolSize; i++) {
executor.submit(new DbUpdateWorker());
}
【问题讨论】:
-
在这种情况下您可以使用
ReadWriteLock。让所有小型消息处理器锁定读取锁,让大型消息队列处理器锁定写入。不过不太合适。
标签: java multithreading