我想在一段时间后终止某个进程,如果该进程不响应 我使用此代码,但我无法实现相同的
long start = System.currentTimeMillis(); long end = start +60000;
1 while (System.currentTimeMillis() < end)
2 {
3 Connection.execute(function); // execute
4 break; // break if response came
5 }
6 if(System.currentTimeMillis() > end)
7 {
8 close connection; // close connection if line no 3 will not responded
9 }
请帮助我同样的
答案 0 :(得分:0)
由于调用Connection.execute()被阻塞,所以主线程将被阻塞直到它执行,所以在那种情况下,如果我们想在主线程被阻塞时关闭连接,我们必须关闭其他一些连接线。也许我们可以使用Timer&amp;在这种情况下TimerTask。我试着编写如下代码,也许你可以这样做。
Timer timer = new Timer();
while (System.currentTimeMillis() < end) { //In any case, this loop runs for only one time, then we can replace it with IF condition
CloseConnectionTask task = new CloseConnectionTask(Connection);
timer.schedule(task, end); // Task will be excuted after the delay by "end" milliseconds
Connection.execute(function); // execute
task.cancel(); //If the excute() call returns within time ie. "end" milliseconds, then timerTask will not get executed.
break; // break if response came//
}
timer.cancel(); // If you have no more scheduling tasks, then timer thread should be stopped.
下面是TimerTask实现:
class CloseConnectionTask extends TimerTask {
private Connection con;
public CloseConnectionTask(Connection con) {
this.con = con;
}
@Override
public void run() {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
注意:我还有一件事要说,在你的while循环中,如果调用Connection.execute()成功,那么你就从循环中断。所以我观察到的,无论如何你的循环只执行一次,如果是这种情况,那么你应该使用IF(再次是我在提供的代码中看到的,你的要求可能会有所不同)。希望它可以帮到你。如果您对此有其他想法,请分享。我的回答是基于link这个好信息。在那里。
答案 1 :(得分:-2)