0

我试图在代码中实现超时。基本上我想开始超时,如果发生超时,它应该调用一个方法。

Pseudocode way:
      in bar function
            start timeout    ---> ( at background, if timeout occurs call foo() )

      in foo function
            cancel timeout
            print something

发生超时后如何调用方法?

编辑:我应该有能力重新开始超时。

4

2 回答 2

1

可能有很多不同的方法来实现它......

最简单的可能只是使用java.util.Timer它将允许您安排TimerTask在未来某个时间执行...

您还可以查看ScheduledExecutorService,我认为它是Executor等价的。

于 2013-05-06T06:34:06.980 回答
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!";
    }
}

如果您有任何疑问,请参阅主题

未来的解释:未来代表异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。结果只能在计算完成后使用方法 get 检索,必要时阻塞,直到它准备好。

取消是通过取消方法执行的。提供了额外的方法来确定任务是正常完成还是被取消。一旦计算完成,就不能取消计算。如果您想使用 Future 来取消可取消性但不提供可用的结果,您可以声明 Future 形式的类型并返回 null 作为底层任务的结果。

请参考本站

于 2013-05-06T05:52:16.587 回答