1

我有两个线程,一个用于读取,一个用于通过同一个套接字写入数据。何时出现连接问题,两个线程捕获异常并尝试重新连接。为此,它们调用相同的方法

   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;
        }

问题是如何避免立即尝试从两个线程一一连接服务器(在连接错误之后 - 例如在服务器关闭连接之后)。我的意思是:如果一个线程尝试连接,第二个线程应该知道这一点并且不要尝试做同样的事情,而是等待第一个线程建立连接(以避免永久战斗线程问题断开连接、连接、断开连接、连接......) . 我试过同步,但我的经验太少了。问候, 阿蒂克

4

2 回答 2

0

You could try something like this:

while(not connected){
   try reconnecting
   if(success){
      //Everything is ok, go on
   } else {
      //sleep for random period of time and retry
   }
}

or you can implement the socket operations in an object and share that object between your threads using locks.

于 2013-01-21T22:17:24.570 回答
0

使用适当的互斥锁。这将确保只有一个线程可以访问代码的 connect() 部分。

于 2013-09-20T08:35:59.530 回答