如何按时间中断方法执行?

时间:2011-06-23 21:13:33

标签: java

假设方法A正在调用方法B。方法A可以控制方法B的执行时间并将其中断,假设为60秒(方法B可以挂起)例如?

3 个答案:

答案 0 :(得分:5)

您可以使用ExecutorService异步运行任务,获取Future,以便在完成任务时获取任务结果。 get上有一个Future方法,您可以调用该方法等待答案,并超时。如果超时,您会尝试通过cancel上的Future取消该任务。

ExecutorService executorService = Executors.newSingleThreadExecutor();

// Callable that has a run() method that executes the task
Callable<String> callable = ...;

// Submit the task for execution
Future<String> future = executorService.submit(callable);

try {
    String result = future.get(30, TimeUnit.SECONDS);
    System.out.println("Result: " + result);
}
catch (TimeoutException e) {
    System.out.println("Timeout");
    future.cancel(true);
}

并发API还有很多,请参阅包java.util.concurrent

答案 1 :(得分:0)

你能描述一下你到底想要什么吗? 只需停止执行方法即可使用return, System.exit(),最后一站VM。 按时间,只需检查时间并从方法返回。此外,你可以尝试一些反思黑客...... 顺便说一下,如果你用更多的话来描述你需要什么来帮助你,这些只是想象力。

答案 2 :(得分:0)

尝试:

public static void wait(int n){
    long time0,time1;
     time0=System.currentTimeMillis();
    do{
        time1=System.currentTimeMillis();
    }
    while (time1-time0<n);

}

我认为这很有效。如果您调用此方法,请使用您希望程序作为参数等待的时间量(以毫秒为单位)传递它。

祝你好运!