Java 多线程阻塞工作线程
我有4-5个工作线程处理大型消息队列。我还有另一段代码,它使用2-3个worker运行。我想在处理大型消息队列时阻止所有其他工作进程 我正在使用JDK 6和Jms 编辑: 队列进程工作人员从未终止。当没有消息时,他们阻塞了队列。这些工作线程由executor线程池管理。如果我使用读写锁,其中一个工作线程也将被阻止。 另外,如果使用循环屏障,那么我必须终止线程,以释放阻塞的第二个进程。由于工作线程由线程池管理,所以不能保证所有工作线程都将忙于处理消息 让我知道Java 多线程阻塞工作线程,java,multithreading,Java,Multithreading,我有4-5个工作线程处理大型消息队列。我还有另一段代码,它使用2-3个worker运行。我想在处理大型消息队列时阻止所有其他工作进程 我正在使用JDK 6和Jms 编辑: 队列进程工作人员从未终止。当没有消息时,他们阻塞了队列。这些工作线程由executor线程池管理。如果我使用读写锁,其中一个工作线程也将被阻止。 另外,如果使用循环屏障,那么我必须终止线程,以释放阻塞的第二个进程。由于工作线程由线程池管理,所以不能保证所有工作线程都将忙于处理消息 让我知道 final ExecutorServ
final ExecutorService executor = getExecutorManager().getExecutor();
for (int i = 0; i < threadPoolSize; i++) {
executor.submit(new MessageWorker(qConn));
}
final executor服务executor=getexecutomanager().getExecutor();
对于(int i=0;i
下面是第二个模块,我希望在队列处理器工作线程工作时阻止所有工作线程
final ExecutorService executor = getExecutorManager().getExecutor();
for (int i = 0; i < threadPoolSize; i++) {
executor.submit(new DbUpdateWorker());
}
final executor服务executor=getexecutomanager().getExecutor();
对于(int i=0;i
您需要使用
一种同步辅助工具,允许一组线程都等待对方到达一个共同的障碍点。CyclicBarrier在涉及固定大小的线程组的程序中很有用,这些线程有时必须互相等待。该屏障被称为循环屏障,因为它可以在释放等待的线程后重新使用
用作:
CyclicBarrier barrier = new CyclicBarrier(numWorkers, runnable);
其中,runnable
是工作线程完成时要调用的runnable
。每个线程在完成后调用barrier.await()。您需要使用
一种同步辅助工具,允许一组线程都等待对方到达一个共同的障碍点。CyclicBarrier在涉及固定大小的线程组的程序中很有用,这些线程有时必须互相等待。该屏障被称为循环屏障,因为它可以在释放等待的线程后重新使用
用作:
CyclicBarrier barrier = new CyclicBarrier(numWorkers, runnable);
其中,
runnable
是工作线程完成时要调用的runnable
。完成后,每个线程调用barrier.await()。在这种情况下,您可以使用ReadWriteLock
。让所有的小消息处理器锁定读锁和大消息队列处理器的写锁。不过不太合适。在这种情况下,您可以使用ReadWriteLock
。让所有的小消息处理器锁定读锁和大消息队列处理器的写锁。虽然不太合适。@apg您几乎可以肯定这里的设计很差。不应该真的有长时间运行的工作线程;使用线程池。我使用的线程池如上所示。而且线程在jms队列上锁定。@apg您几乎可以肯定这里的设计很差。不应该真的有长时间运行的工作线程;使用线程池。我使用的线程池如上所示。线程在jms队列上锁定。