客户端/服务器应用程序。 多个客户端可以连接到服务器。 对于每个客户端连接,服务器创建新线程。 客户端发送数据,直到它关闭套接字。 所以我需要每次都将由线程服务器管理的数据返回给主服务器。我不能等待线程完成他的工作,因为我不知道客户端什么时候关闭连接。 什么是正确的方法?
答案 0 :(得分:0)
创建线程时,您可以将共享队列作为参数传递。在线程的主体中,当您从客户端获取数据时,将其推送到队列中。在您的服务器循环中轮询队列中的数据并使用它。 ConcurrentLinkedQueue应该合适。例如:
// main server thread
Queue<SomeData> queue = new ConcurrentLinkedQueue<>();
// ... loop code, etc
Thread thread = new MyThread(queue);
// in thread responsible for GUI updates
SomeData data = queue.poll();
if (data != null) // do something
// client connection thread
SomeData data = ... // received from client
queue.offer(data);