如何关闭2个线程使用的inputStream

时间:2012-05-23 09:24:52

标签: java sockets stream

我有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个线程中完成?我在java.net.SocketException

中获得了ServerThread
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();
    }
}

2 个答案:

答案 0 :(得分:1)

您的线程正在接收来自外部源的is和os,因此关闭流的责任应该在于外部实体。不要在螺纹内部关闭它们。在创建它们的地方外部处理它。

答案 1 :(得分:0)

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