我有以下的Java代码:java.util.concurrent.Future.get()没有返回
final Future future = exeService.submit(
new Runnable() {
public void run() {
myObject.doSomething();
}
}
);
future.get();
其中exeService
是
java.util.concurrent.ExecutorService
实例的问题是,myObject.doSomething()
永远不会返回,因此,future.get()
永远不会返回。
但是,如果我有像这样execute
调用替换调用submit
:
exeService.execute(
new Runnable() {
public void run() {
myObject.doSomething();
}
}
);
调用myObject.doSomething()
不会返回。我不知道它是否重要,但doSomething()
是void
方法。
为什么doSomething()
在使用execute
时完成,但在使用submit
时没有完成?
而且,我并不需要使用Future.get()
;这似乎是这样做的最自然的方式。 (我也碰到与CountdownLatch
同样的问题。)问题的关键是,我需要等待doSomething()
继续之前完成,而且,对于复杂的原因,我不会进入这里,我需要启动它在一个单独的线程。如果有另一种方法可行,那就没问题了。
你在问'doSomething'的行为,但不会告诉我们任何事情。我们不能帮你在这里... – 2010-04-06 15:15:53
你的问题很混乱。第一个构造应该正常工作。困惑在于“回归”。难道你不是指“完成”或“执行”?你的困惑似乎基于这样一个事实,即future.get()实际上等待可执行完成,因此会阻塞该线程并阻止它执行'future.get()之后的代码剩余部分)'线。 – BalusC 2010-04-06 15:17:54
你是如何创建'exeService'的?它是一个ThreadPoolExecutor或其他东西? – nos 2010-04-06 15:39:37