我试图使用多个线程,遗憾的是没有运气:
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服务器的方法?
答案 0 :(得分:3)
您需要从代码中删除以下行。 tt.join()将强制主线程等待tt完成。
try {
tt.join();
} catch (InterruptedException e) {
tt.stop();
}
tt.stop();
使用Future代替获取结果供以后使用
答案 1 :(得分:3)
你到底想要什么?
try {
tt.join();
} catch (InterruptedException e) {
tt.stop();
}
阻止? 在这里你加入了并行线程并等待这个线程结束(得到ping结果)。
您有下一个选择: