首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多头阻塞工作线程

多头阻塞工作线程
EN

Stack Overflow用户
提问于 2013-04-09 02:47:13
回答 1查看 527关注 0票数 1

我有4-5个工作线程处理大型消息队列。我还有另外一段代码,它使用2-3个工人来运行。我想在处理大型消息队列时阻止所有其他工作进程。

我使用的是JDK 6和Jms

编辑:

队列进程工作进程从未终止。当没有消息时,它们阻塞在队列上。这些工作线程由executor线程pool.If管理,我使用读写锁,其中一个工作线程也会被阻塞。此外,如果使用循环屏障,那么我必须终止线程,以便重新释放阻塞的第二个进程。因为工作线程是由线程池管理的,所以不能保证所有的工作进程都在忙于处理消息。

让我知道,

代码语言:javascript
复制
final ExecutorService executor = getExecutorManager().getExecutor();
for (int i = 0; i < threadPoolSize; i++) {
executor.submit(new MessageWorker(qConn));
}

接下来是第二个模块,我希望所有的工作线程在队列处理器工作时都被阻塞。

代码语言:javascript
复制
final ExecutorService executor = getExecutorManager().getExecutor();
for (int i = 0; i < threadPoolSize; i++) {
executor.submit(new DbUpdateWorker());
}
EN

回答 1

Stack Overflow用户

发布于 2013-04-09 02:49:19

您需要使用CyclicBarrier

一种同步辅助工具,允许一组线程相互等待以达到共同的障碍点。CyclicBarriers在涉及固定大小的线程的程序中很有用,这些线程必须偶尔相互等待。这个屏障被称为循环的,因为它可以在等待线程被释放后被重用。

用作:

代码语言:javascript
复制
CyclicBarrier barrier = new CyclicBarrier(numWorkers, runnable);

其中,runnable是您希望在工作线程完成时调用的Runnable。每个线程在完成时都会调用barrier.await()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15886615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档