Java:在多个线程上等待/通知
我有一个类,它包含对通过TCP(每个客户端1个)接收对象的工作线程的引用集合 我试图在我的类中创建一个方法Java:在多个线程上等待/通知,java,multithreading,wait,notify,Java,Multithreading,Wait,Notify,我有一个类,它包含对通过TCP(每个客户端1个)接收对象的工作线程的引用集合 我试图在我的类中创建一个方法getMessage(),该方法等待任何工作线程获得消息并返回它 我现在得到的是一个投票系统: public Object getMessage() { while (true) { for (Worker w : workers.values()) if (w.msgNumber() != 0)
getMessage()
,该方法等待任何工作线程获得消息并返回它
我现在得到的是一个投票系统:
public Object getMessage() {
while (true) {
for (Worker w : workers.values())
if (w.msgNumber() != 0)
return w.getLastMsg();
Thread.sleep(100);
}
}
它可以工作,但我认为它的可扩展性不强
我知道我可以对每个工人执行等待(超时)
,但问题仍然存在
是否存在某种等待/通知机制来等待多个线程?您可以考虑在线程之间使用阻塞队列进行通信。工作线程将插入队列,而
getMessage()
函数将从队列中提取消息。您可以考虑使用阻塞队列进行线程之间的通信。工作线程将插入队列,而getMessage()
函数将从队列中提取消息。类似这样的情况如何:
try {
ServerSocket srv = new ServerSocket(port);
// Wait for connection from client.
while (true) {
System.out.println("Listening...");
// Waits for connection
new Thread(new ServerWorkerThread(srv.accept())).start();
}
} catch (IOException e) {
//handle
}
比如说:
try {
ServerSocket srv = new ServerSocket(port);
// Wait for connection from client.
while (true) {
System.out.println("Listening...");
// Waits for connection
new Thread(new ServerWorkerThread(srv.accept())).start();
}
} catch (IOException e) {
//handle
}
您希望实现生产者/消费者范例的一个版本。这个链接很好地介绍了如何在Java中这样做:搜索术语“producer consume Java”会产生更多有用的页面。在这种情况下,您可以在主线程上使用wait()(无超时),当需要执行某些操作时,它将被唤醒。这个链接很好地介绍了如何在Java中这样做:搜索术语“producer consume Java”会产生更多有用的页面。在这种情况下,您可以在主线程上使用wait()(无超时),当需要执行某些操作时,它将被唤醒。感谢您的回复。不幸的是,工人们不能相互认识,也不能认识他们之上的阶级(他们必须能够在没有这种认识的情况下工作)。我想做一些低耦合的东西。好吧,工人们不需要相互了解,也不需要了解“他们之上的阶级”。他们只是访问一个队列对象,可以将消息填充到其中,或者访问一个API,可以调用该API将消息填充到队列中。使用为此任务设计的高级类,而不是
wait()
和notify()
。如果您不了解如何应用高级并发实用程序,那么如何使用低级原语呢?工作人员唯一的依赖就是依赖于。如果您希望在消费者跟不上时限制客户端,您可以切换到感谢您的响应。不幸的是,工人们不能相互认识,也不能认识他们之上的阶级(他们必须能够在没有这种认识的情况下工作)。我想做一些低耦合的东西。好吧,工人们不需要相互了解,也不需要了解“他们之上的阶级”。他们只是访问一个队列对象,可以将消息填充到其中,或者访问一个API,可以调用该API将消息填充到队列中。使用为此任务设计的高级类,而不是wait()
和notify()
。如果您不了解如何应用高级并发实用程序,那么如何使用低级原语呢?工作人员唯一的依赖就是依赖于。如果您希望在消费者无法跟上时限制客户端,可以切换到