我有两个线程,一个用于读取,一个用于通过同一个套接字写入数据。当与连接问题两个线程捕获异常,并尝试reconnect.To为此,他们调用相同的方法如何通过两个线程同步关闭套接字?
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;
}
的问题是如何避免尝试从两个线程中立即连接服务器(连接错误后 - 例如关闭服务器连接)。我的意思是:如果一个线程尝试连接,第二个线程应该知道这一点,并且不要尝试做同样的事情,但要等待第一个线程建立连接(以避免永久性线程问题断开,连接,断开连接....) 。我尝试过同步,但我的经验太小。 问候, ARTIK
尝试谷歌“生产者消费者” –