我希望能够在后台执行一些有时间限制的工作,但不想阻塞主线程。
幼稚的实现方式是使用两个执行器服务。一个用于调度/超时,第二个则负责完成工作。
有其他解决方案吗?
幼稚的实现方式是使用两个执行器服务。一个用于调度/超时,第二个则负责完成工作。
final ExecutorService backgroundExecutor = Executors.newSingleThreadExecutor();
final ExecutorService workerExecutor = Executors.newCachedThreadExecutor();
backgroundExecutor.execute(new Runnable() {
public void run() {
Future future = workerExecutor.submit(new Runnable() {
public void run() {
// do work
}
});
try {
future.get(120 * 1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
logger.error("InterruptedException while notifyTransactionStateChangeListeners()", e);
future.cancel(true);
} catch (ExecutionException e) {
logger.error("ExecutionException", e);
} catch (TimeoutException e) {
logger.error("TimeoutException", e);
future.cancel(true);
}
}
});
有其他解决方案吗?