我有两个线程,一个用于读取,一个用于通过同一个套接字写入数据。何时出现连接问题,两个线程捕获异常并尝试重新连接。为此,它们调用相同的方法
public synchronized void close_connection() {
try {
socket.shutdownInput();
socket.shutdownOutput();
socket.close();
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
然后第二个尝试建立连接:
public synchronized boolean connect() {
boolean result=true;
socket = new Socket();
try {
socket.connect(new InetSocketAddress(address, port), 500);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
} catch (IOException e) {
result=false;
}
return result;
}
问题是如何避免立即尝试从两个线程一一连接服务器(在连接错误之后 - 例如在服务器关闭连接之后)。我的意思是:如果一个线程尝试连接,第二个线程应该知道这一点并且不要尝试做同样的事情,而是等待第一个线程建立连接(以避免永久战斗线程问题断开连接、连接、断开连接、连接......) . 我试过同步,但我的经验太少了。问候, 阿蒂克