如何用java.util.concurrency实现“失火而忘”的行为?我试过:
ExecutorService executor = Executors.newSingleThreadExecutor();
public void push(Callable<Boolean> task) {
Future<Boolean> future = executor.submit(task);
future.get(timeout, timeoutUnit);
}但是get()一直在阻塞直到完成。push()调用者对任务的结果不感兴趣。
发布于 2013-09-05 18:33:17
不要打电话给get()。submit()足以在Thread中启动Callable。当您准备好获得结果时,您可以传递Future并调用它的get() (如果有的话)。
Javadoc态
提交一个值返回任务以供执行,并返回表示任务挂起的结果的未来。未来的get方法将在任务成功完成后返回任务的结果。如果要立即阻止等待任务,则可以使用form =exec.submit(ACallable).get()的构造;
所以不要打电话给get()。
发布于 2013-09-05 21:59:40
不需要未来的对象,如果你必须忘记它,即不关心线程的未来。:)
ExecutorService executor = Executors.newSingleThreadExecutor();
public void push(Callable<Boolean> task) {
executor.submit(task);
}或者,如果你需要使用未来的某个时间比:-
ExecutorService executor = Executors.newSingleThreadExecutor();
public void push(Callable<Boolean> task) {
someCollection.add(executor.submit(task)); // use futures later
}或者使用execute从执行者,并通过运行,如果你不打算得到未来。
ExecutorService executor = Executors.newSingleThreadExecutor();
public void push(Runnable task) {
executor.execute(task);
}// execute将调用异常情况下的默认异常处理程序,如果在submit方法中无法获得期货,则会丢失异常处理程序。
https://stackoverflow.com/questions/18643477
复制相似问题