0

我有一个类,它包含对通过 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)对每个工人做一个,但问题仍然存在。

是否有某种等待/通知机制等待多个线程?

4

2 回答 2

4

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

于 2012-06-22T21:16:16.873 回答
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
    }
于 2012-06-22T21:19:22.990 回答