如何在Java中实现同步方法超时?

Smi*_*esh 22 java timeout synchronous

我有一个同步执行路径,需要在给定的时间范围内完成或超时.假设我有一个带有main()方法的类,其中我调用方法A(),后者又调用B(),然后调用相同或不同类的C().....所有同步而不使用一个外部资源,如数据库,Web服务或文件系统(其中每个都可以使用TxManager或相应的超时api独立超时).所以它更像是CPU或内存密集型计算.如何在Java中编写它的超时代码?

我已经看过TimerTask,但更多的是使流异步和调度任务.还有其他建议吗?

Tal*_*ala 40

您应该使用ExecutorService来执行此操作

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable() {

    public String call() throws Exception {
        //do operations you want
        return "OK";
    }
});
try {
    System.out.println(future.get(2, TimeUnit.SECONDS)); //timeout is in 2 seconds
} catch (TimeoutException e) {
    System.err.println("Timeout");
}
executor.shutdownNow();
Run Code Online (Sandbox Code Playgroud)

  • 它只是“超时”获取,您需要通过“cancel(true)”方法或调用 executor.shutdownNow() 中断未来 (2认同)