Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不冻结线程的情况下Ping服务器_Java_Multithreading_Sockets - Fatal编程技术网

Java 在不冻结线程的情况下Ping服务器

Java 在不冻结线程的情况下Ping服务器,java,multithreading,sockets,Java,Multithreading,Sockets,我尝试使用多个线程,可惜没有运气: 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 {

我尝试使用多个线程,可惜没有运气:

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服务器?

您需要从代码中删除以下行。 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”线程抛出结果

你认为tt.join()有什么作用?让当前线程等待
tt
完成其执行。@Reimeus用户告诉我tt.join()误导了我;等待任务完成。如果你只是等待它完成,为什么要启动一个线程来做某事?与其等待,不如自己动手。这条线对你有什么好处?