Java:在多个线程上等待/通知

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)

我有一个类,它包含对通过TCP(每个客户端1个)接收对象的工作线程的引用集合

我试图在我的类中创建一个方法
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()
。如果您不了解如何应用高级并发实用程序,那么如何使用低级原语呢?工作人员唯一的依赖就是依赖于。如果您希望在消费者无法跟上时限制客户端,可以切换到