Java 发生超时后调用方法
我尝试在代码中实现超时。基本上我想启动超时,如果超时发生,它应该调用一个方法Java 发生超时后调用方法,java,multithreading,timeout,Java,Multithreading,Timeout,我尝试在代码中实现超时。基本上我想启动超时,如果超时发生,它应该调用一个方法 Pseudocode way: in bar function start timeout ---> ( at background, if timeout occurs call foo() ) in foo function cancel timeout print something 超时发生后如何调用
Pseudocode way:
in bar function
start timeout ---> ( at background, if timeout occurs call foo() )
in foo function
cancel timeout
print something
超时发生后如何调用方法
编辑:我应该能够重新启动超时。也许这可以回答你的问题
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!";
}
}
import java.util.concurrent.Callable;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入java.util.concurrent.Future;
导入java.util.concurrent.TimeUnit;
导入java.util.concurrent.TimeoutException;
公开课考试{
公共静态void main(字符串[]args)引发异常{
ExecutorService executor=Executors.newSingleThreadExecutor();
Future=executor.submit(新任务());
试一试{
System.out.println(“已启动…”);
System.out.println(future.get(3,TimeUnit.SECONDS));
System.out.println(“完成!”);
}捕获(超时异常e){
System.out.println(“终止!”);
}
执行者。关机现在();
}
}
类任务实现可调用{
@凌驾
公共字符串调用()引发异常{
Thread.sleep(5000);//表示5秒
返回“准备好!”;
}
}
如果您有问题,请参考
对未来的解释:
未来表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。只有在计算完成后,才能使用方法get检索结果,如有必要,请阻塞,直到它准备就绪
取消是通过取消方法执行的。还提供了其他方法来确定任务是正常完成还是取消。一旦计算完成,就不能取消计算。如果为了可取消性而使用Future,但不提供可用的结果,则可以声明Future的类型,并作为基础任务的结果返回null
请参考此可能有很多不同的方法来实现它 最简单的可能就是使用它,它允许您计划在将来某个时间执行
TimerTask
你也可以看一看,我相信它是
Executor
等价物。你说的是线程吗???@Baadshah我不知道如何实现,如果唯一的方法是线程,好的,我是说线程。bar函数不是一个线程,您可以看一下,或者如果您使用的是Swing,@MadProgrammer,您可以给出一个示例代码或answer@user2353516可能类似于这一行System.out.println(future.get(3,TimeUnit.SECONDS))代码>是否正在睡觉?如果您认为这是适合您的答案,请选中并单击“批准”按钮接受此问题作为您的答案。谢谢,GBU