我有4-5个工作线程处理大型消息队列。我还有另外一段代码,它使用2-3个工人来运行。我想在处理大型消息队列时阻止所有其他工作进程。
我使用的是JDK 6和Jms
编辑:
队列进程工作进程从未终止。当没有消息时,它们阻塞在队列上。这些工作线程由executor线程pool.If管理,我使用读写锁,其中一个工作线程也会被阻塞。此外,如果使用循环屏障,那么我必须终止线程,以便重新释放阻塞的第二个进程。因为工作线程是由线程池管理的,所以不能保证所有的工作进程都在忙于处理消息。
让我知道,
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());
}发布于 2013-04-09 02:49:19
您需要使用CyclicBarrier。
一种同步辅助工具,允许一组线程相互等待以达到共同的障碍点。CyclicBarriers在涉及固定大小的线程的程序中很有用,这些线程必须偶尔相互等待。这个屏障被称为循环的,因为它可以在等待线程被释放后被重用。
用作:
CyclicBarrier barrier = new CyclicBarrier(numWorkers, runnable);其中,runnable是您希望在工作线程完成时调用的Runnable。每个线程在完成时都会调用barrier.await()。
https://stackoverflow.com/questions/15886615
复制相似问题