Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在完成任务之前从线程返回数据。(爪哇)_Java_Multithreading_Client Server - Fatal编程技术网

Java 在完成任务之前从线程返回数据。(爪哇)

Java 在完成任务之前从线程返回数据。(爪哇),java,multithreading,client-server,Java,Multithreading,Client Server,客户端/服务器应用程序。 多个客户端可以连接到服务器。 对于每个客户端连接,服务器都会创建新线程。 客户端发送数据,直到关闭套接字。 因此,我需要由线程服务器管理的数据每次都返回到主服务器。我等不及线程完成他的工作了,因为我不知道客户端何时关闭连接。 正确的方法是什么 创建线程时,可以将共享队列作为参数传递。在线程体中,当您从客户端获取数据时,将其推送到队列中。在服务器循环中,轮询队列中的数据并使用它。应该是合适的。例如: // main server thread Queue<SomeD

客户端/服务器应用程序。 多个客户端可以连接到服务器。 对于每个客户端连接,服务器都会创建新线程。 客户端发送数据,直到关闭套接字。 因此,我需要由线程服务器管理的数据每次都返回到主服务器。我等不及线程完成他的工作了,因为我不知道客户端何时关闭连接。
正确的方法是什么

创建线程时,可以将共享队列作为参数传递。在线程体中,当您从客户端获取数据时,将其推送到队列中。在服务器循环中,轮询队列中的数据并使用它。应该是合适的。例如:

// 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);

你需要像C的收益率。尝试此链接-您可以在主服务器上调用一个方法并传递信息。因此,主服务器可以在自己的字段中读取这些信息。你说的主服务器是什么意思?你不是在说在服务器上运行的线程吗?我认为,如果您能够更好地定义返回主服务器意味着什么,那么您的问题的答案可能会变得显而易见。例如,服务器将永远循环,直到客户端连接到服务器,服务器才会为此客户端创建新线程。线程从客户端获取数据,并希望在GUI中向服务器显示这些数据。对多个客户端重复此操作。这里的问题是,只有当服务器获得客户端连接时,数据更新才可能,因为它在ServerSocket.accept方法中等待。因此,您需要另一个线程负责数据更新,因为accept会阻塞执行数据更新的线程。生成一个线程来更新GUI,然后才开始侦听连接