谁能指导我如何在Java中使用简单超时?基本上在我的项目中,我正在执行br.readLine()
语句,该语句正在读取调制解调器的响应。但是有时调制解调器没有响应。为此,我想添加一个超时。
我正在寻找类似的代码:
try {
String s= br.readLine();
} catch(TimeoutException e) {
System.out.println("Time out has occurred");
}
最佳答案
您正在寻找的内容可以在here中找到。可能存在一种更优雅的方式来实现该目标,但是一种可能的方式是
选项1(首选):
final Duration timeout = Duration.ofSeconds(30);
ExecutorService executor = Executors.newSingleThreadExecutor();
final Future<String> handler = executor.submit(new Callable() {
@Override
public String call() throws Exception {
return requestDataFromModem();
}
});
try {
handler.get(timeout.toMillis(), TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
handler.cancel(true);
}
executor.shutdownNow();
选项2:
final Duration timeout = Duration.ofSeconds(30);
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
final Future<String> handler = executor.submit(new Callable() {
@Override
public String call() throws Exception {
return requestDataFromModem();
}
});
executor.schedule(new Runnable() {
@Override
public void run(){
handler.cancel(true);
}
}, timeout.toMillis(), TimeUnit.MILLISECONDS);
executor.shutdownNow();
这些只是草稿,因此您可以了解主要思想。