Java 如何关闭2个线程使用的inputStream
我有两个线程-一个用于接收消息,第二个用于接收和发送消息Java 如何关闭2个线程使用的inputStream,java,sockets,stream,Java,Sockets,Stream,我有两个线程-一个用于接收消息,第二个用于接收和发送消息 PrintStream os = new PrintStream(sock.getOutputStream()); BufferedReader is = new BufferedReader(new InputStreamReader(sock.getInputStream())); ServerThread server = new ServerThread(sock, maxid, os,is); OutputThread out
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,但如何在两个线程中同时关闭这两个呢?我在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();
}
}
看
这可用于线程在其中一个关闭流之前互相等待。查看
这可用于线程在其中一个关闭流之前互相等待。您的线程正在从外部源接收is和os,因此关闭流的责任应由外部实体承担。不要在螺纹内关闭它们。在创建流的地方进行外部处理。您的线程从外部源接收is和os,因此关闭流的责任应由外部实体承担。不要在螺纹内关闭它们。在创建消息的地方进行外部处理。将代码张贴在试图关闭消息的地方。首先,将close()方法移到finally块。“一个用于接收消息,另一个用于接收和发送消息”。那么你已经有了比你现在意识到的更多的问题。您无法控制哪个线程接收什么。您必须修改此体系结构。如果两个线程之间没有非常精细的同步,它就无法工作,而使用单个读取线程和内部队列则更容易实现同步。可能您根本不需要只读线程。将代码张贴在您试图关闭它们的位置。首先,将close()方法移到finally块。“一个用于接收消息,另一个用于接收和发送”。那么你已经有了比你现在意识到的更多的问题。您无法控制哪个线程接收什么。您必须修改此体系结构。如果两个线程之间没有非常精细的同步,它就无法工作,而使用单个读取线程和内部队列则更容易实现同步。可能您根本不需要只读线程。