簡體   English   中英

在不凍結線程的情況下ping服務器

[英]Ping a server without freezing the Thread

我試圖使用多個線程,遺憾的是沒有運氣:

public synchronized boolean pingServer(final String ip, final short port) {
    final boolean[] returnbol = new boolean[1];
    Thread tt = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Socket s = new Socket(ip, port);
                s.close();
                returnbol[0] = true;
            } catch (IOException e) {
                returnbol[0] = false;
            }
        }
    });
    tt.start();
    try {
        tt.join();
    } catch (InterruptedException e) {
        tt.stop();
    }
    tt.stop();
    return returnbol[0];
}

由於某種原因,主線程仍然凍結。

ping服務器有“無法”的方法嗎?

您需要從代碼中刪除以下行。 tt.join()將強制主線程等待tt完成。

try {
    tt.join();
} catch (InterruptedException e) {
    tt.stop();
}
tt.stop();

使用Future來獲取結果供以后使用

你究竟想要得到什么?

try {
        tt.join();
    } catch (InterruptedException e) {
        tt.stop();
    }

塊? 在這里你加入了並行線程並等待這個線程結束(獲得ping結果)。

你有下一個選擇:

  • 等到ping結束
  • 不要等......而且沒有結果
  • 使用一些並發類(如Future <>)來獲得結果(但如果尚未檢索結果,您將在詢問結果時阻止線程)
  • 或者你可以使用一些'回調'函數/接口從內部'ping'線程中拋出結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM