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

时间:2012-06-22 21:10:59

标签: java multithreading wait notify

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

我正在尝试在我的类中创建一个方法getMessage(),等待任何工作线程收到消息并返回它。

我现在得到的是一个投票系统:

public Object getMessage() {  
    while (true) {  
        for (Worker w : workers.values())  
             if (w.msgNumber() != 0)  
                 return w.getLastMsg();  
        Thread.sleep(100);  
    }  
}

它有效,但我不认为它具有很高的可扩展性。

我知道我可以对每个工人做wait(timeout),但问题保持不变。

是否存在某种等待多线程的等待/通知机制?

2 个答案:

答案 0 :(得分:4)

您可以查看使用阻塞队列进行线程之间的通信。工作线程将插入队列,而getMessage()函数从队列中提取消息。

答案 1 :(得分:0)

如下:

   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
    }