Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 如何停止ExecutorService中的其他线程?_Java_Multithreading_Server_Client_Executorservice - Fatal编程技术网

Java 如何停止ExecutorService中的其他线程?

Java 如何停止ExecutorService中的其他线程?,java,multithreading,server,client,executorservice,Java,Multithreading,Server,Client,Executorservice,我制作了一个客户机-服务器聊天应用程序,线程不平衡,因为我只能终止池中的一个线程(2个线程) 例如,服务器启动。它创建一个包含两个线程的池(一个用于发送,一个用于接收)。服务器发送一条消息。它删除用于发送的原始线程并创建一个新池。现在有了原始的接收线程和一个包含两个以上线程的新池。它对相反的故事(接收消息)也是如此 这两个线程都在等待输入或输出,因此我认为我无法进行任何检查,以查看池中的另一个线程是否已完成 代码是这样的 ExecutorService executorService = Exe

我制作了一个客户机-服务器聊天应用程序,线程不平衡,因为我只能终止池中的一个线程(2个线程)

例如,服务器启动。它创建一个包含两个线程的池(一个用于发送,一个用于接收)。服务器发送一条消息。它删除用于发送的原始线程并创建一个新池。现在有了原始的接收线程和一个包含两个以上线程的新池。它对相反的故事(接收消息)也是如此

这两个线程都在等待输入或输出,因此我认为我无法进行任何检查,以查看池中的另一个线程是否已完成

代码是这样的

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()不工作,因为线程中的代码在等待输入/输出时被冻结/卡住