我有以下的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