在一次迭代中终止该函数,并在 Java 中的 X 秒后继续进行下一次迭代
Kill the function in one iteration and proceed to the next iteration after X seconds in Java
如果一个函数耗时太长,如何在一次迭代中跳过或杀死一个函数,然后进行下一次迭代?
我的示例代码如下
for (String word : wordSet){
try{
lookup(word);
// if (lookup(word)>2 seconds){
// throw an exception. Skip this word and check next word}
}
catch(Exception TimeoutException){
slowWordSet.add(word);
// check next word
}
}
将查找方法放入可调用对象中,并将其发送到执行程序服务。存储返回的未来。然后每隔一段时间轮询它的状态。如果完成,则继续下一次迭代。如果不是,并且时间小于最大允许时间,请休眠一会儿。如果时间大于最大允许时间,则取消任务,抛出异常,然后继续循环。
你可以这样做:
final ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<?> future = null;
try {
future = executorService.submit(() -> {
lookup(word);
});
future.get(2, TimeUnit.SECONDS);
}catch(Exception e){
if(future != null){
future.cancel(true);
}
slowWordSet.add(word);
}
如果一个函数耗时太长,如何在一次迭代中跳过或杀死一个函数,然后进行下一次迭代?
我的示例代码如下
for (String word : wordSet){
try{
lookup(word);
// if (lookup(word)>2 seconds){
// throw an exception. Skip this word and check next word}
}
catch(Exception TimeoutException){
slowWordSet.add(word);
// check next word
}
}
将查找方法放入可调用对象中,并将其发送到执行程序服务。存储返回的未来。然后每隔一段时间轮询它的状态。如果完成,则继续下一次迭代。如果不是,并且时间小于最大允许时间,请休眠一会儿。如果时间大于最大允许时间,则取消任务,抛出异常,然后继续循环。
你可以这样做:
final ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<?> future = null;
try {
future = executorService.submit(() -> {
lookup(word);
});
future.get(2, TimeUnit.SECONDS);
}catch(Exception e){
if(future != null){
future.cancel(true);
}
slowWordSet.add(word);
}