我试图在代码中实现超时。基本上我想启动超时,如果发生超时,它应该调用一个方法。
Pseudocode way:
in bar function
start timeout ---> ( at background, if timeout occurs call foo() )
in foo function
cancel timeout
print something
超时发生后如何调用方法?
编辑:我应该有能力重新开始超时。
答案 0 :(得分:1)
可能有很多不同的方法来实现它......
最简单的可能只是使用java.util.Timer
,这样您就可以安排TimerTask
在将来的某个时间执行...
您还可以查看我认为Executor
等效的ScheduledExecutorService。
答案 1 :(得分:0)
也许这可能会回答你的问题
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class Test {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Task());
try {
System.out.println("Started..");
System.out.println(future.get(3, TimeUnit.SECONDS));
System.out.println("Finished!");
} catch (TimeoutException e) {
System.out.println("Terminated!");
}
executor.shutdownNow();
}
}
class Task implements Callable<String> {
@Override
public String call() throws Exception {
Thread.sleep(5000); //It means 5 seconds
return "Ready!";
}
}
如果您有任何疑问,请参阅threads
未来的解释: Future表示异步计算的结果。提供方法以检查计算是否完成,等待其完成,以及检索计算结果。只有在计算完成时才能使用方法get检索结果,必要时阻塞直到准备就绪。
取消由cancel方法执行。提供了其他方法来确定任务是否正常完成或被取消。计算完成后,无法取消计算。如果您希望为了取消可用性而使用Future但不提供可用的结果,则可以声明Future类型的类型并返回null作为基础任务的结果。
请参阅此site