У меня есть следующий код Java:
final Future future = exeService.submit(
new Runnable() {
public void run() {
myObject.doSomething();
}
}
);
future.get();
, где exeService
- это экземпляр
java.util.concurrent.ExecutorService
Проблема в том, что myObject.doSomething()
никогда не возвращается, и, следовательно, future.get()
никогда не возвращается.
Однако, если я заменю вызов submit
на вызов execute
, например:
exeService.execute(
new Runnable() {
public void run() {
myObject.doSomething();
}
}
);
звонок на myObject.doSomething()
действительно возвращается. Я не знаю, имеет ли это значение, но doSomething()
- это void
метод.
Почему doSomething()
заканчивается при использовании execute
, а не при submit
?
Кроме того, мне не нужно использовать Future.get()
; Казалось, это самый естественный способ сделать это. (Я также сталкиваюсь с той же проблемой с CountdownLatch
.) Суть в том, что мне нужно дождаться завершения doSomething()
, прежде чем продолжить, и по сложным причинам я не буду вдаваться в подробности, мне нужно запустить отдельная тема. Если есть другой способ сделать это, это будет хорошо.