如何关闭 2 个线程使用的输入流



我有 2 个线程 - 一个用于接收消息,第二个用于接收和发送。

PrintStream os = new PrintStream(sock.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(sock.getInputStream()));
ServerThread server = new ServerThread(sock, maxid, os,is);
OutputThread out = new OutputThread(sock, maxid, os,is);

然后,当我关闭连接时,我想正确关闭 is 和 os,但是如何在 2 个线程中同时完成?我在ServerThread中得到java.net.SocketException

public ServerThread(..){
    try{
          //here I use is and os
} finally {
        disconnect();
    }
}
public void disconnect() {
    try {
        System.out.println(addr.getHostName()+ " disconnected");
        os.close();
        try {
            is.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } finally {
        this.interrupt();
    }
}

您的线程正在从外部源接收 is 和 os,因此关闭流的责任应由外部实体承担。不要将它们关闭在线程内。在创建它们的位置外部处理它。

看看 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CyclicBarrier.html这可用于线程在其中一个线程关闭流之前相互等待。

相关内容

  • 没有找到相关文章

最新更新