Java 如何停止ExecutorService中的其他线程?
我制作了一个客户机-服务器聊天应用程序,线程不平衡,因为我只能终止池中的一个线程(2个线程) 例如,服务器启动。它创建一个包含两个线程的池(一个用于发送,一个用于接收)。服务器发送一条消息。它删除用于发送的原始线程并创建一个新池。现在有了原始的接收线程和一个包含两个以上线程的新池。它对相反的故事(接收消息)也是如此 这两个线程都在等待输入或输出,因此我认为我无法进行任何检查,以查看池中的另一个线程是否已完成 代码是这样的Java 如何停止ExecutorService中的其他线程?,java,multithreading,server,client,executorservice,Java,Multithreading,Server,Client,Executorservice,我制作了一个客户机-服务器聊天应用程序,线程不平衡,因为我只能终止池中的一个线程(2个线程) 例如,服务器启动。它创建一个包含两个线程的池(一个用于发送,一个用于接收)。服务器发送一条消息。它删除用于发送的原始线程并创建一个新池。现在有了原始的接收线程和一个包含两个以上线程的新池。它对相反的故事(接收消息)也是如此 这两个线程都在等待输入或输出,因此我认为我无法进行任何检查,以查看池中的另一个线程是否已完成 代码是这样的 ExecutorService executorService = Exe
ExecutorService executorService = Executors.newFixedThreadPool(2);
Future<String> send = executorService.submit(this::send);
Future<String> receive = executorService.submit(this::receive);
<some code to check to see if the future is completed>
sendComplete.cancel(true);
receiveComplete.cancel(true);
executorService.shutdownNow();
private void send() throws IOException {
OutputStream os= socket.getOutputStream();
BufferedReader read= new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw= new PrintWriter(os, true);
********String msg= read.readLine(); //This is wear it freezes
pw.println(messageOutput);
pw.flush();
}
ExecutorService ExecutorService=Executors.newFixedThreadPool(2);
Future send=executorService.submit(this::send);
Future receive=executorService.submit(this::receive);
发送完成。取消(true);
receiveComplete.cancel(true);
executorService.shutdownNow();
私有void send()引发IOException{
OutputStream os=socket.getOutputStream();
BufferedReader read=新的BufferedReader(新的InputStreamReader(System.in));
PrintWriter pw=新的PrintWriter(os,true);
********字符串msg=read.readLine();//这是磨损,它会冻结
println(消息输出);
pw.flush();
}
由于类似的线路,接收器冻结
是否有方法终止/关闭ExecutorService/池中的所有线程?Shutdownow()不工作,因为线程中的代码在等待输入/输出时被冻结/卡住