在Java中,有没有一种标准好的方法来调用带有超时的阻塞方法?我希望能够做到:
// call something.blockingMethod(); // if it hasn't come back within 2 seconds, forget it
如果有道理。
谢谢。
您可以使用执行器:
ExecutorService executor = Executors.newCachedThreadPool(); Callable<Object> task = new Callable<Object>() { public Object call() { return something.blockingMethod(); } }; Future<Object> future = executor.submit(task); try { Object result = future.get(5, TimeUnit.SECONDS); } catch (TimeoutException ex) { // handle the timeout } catch (InterruptedException e) { // handle the interrupts } catch (ExecutionException e) { // handle other exceptions } finally { future.cancel(true); // may or may not desire this }
如果future.get5秒钟后仍未返回,则抛出TimeoutException。可以以秒,分钟,毫秒为单位配置超时,也可以将其配置为单位TimeUnit。
future.get
TimeoutException
TimeUnit
有关更多详细信息,请参见JavaDoc。