发生超时后调用方法

时间:2013-05-06 05:42:01

标签: java multithreading timeout

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

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

      in foo function
            cancel timeout
            print something

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

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

2 个答案:

答案 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