2015-09-02 10 views
-1

У меня есть Java-код, который выглядит следующим образом ...Будущее вызывает бесконечный цикл

package java.uyil.concurrent; 
... 


Future<> future= ...; 
try { 
    while(!future.isDone()) { 
    } 
}catch(Exception e) { 
} 

В основном код предполагается запустить, что в то время как петли, пока будущая задача не будет сделана. По какой-то причине этот код не работает на ПК одного пользователя, и цикл, похоже, продолжается вечно. На других ПК все работает нормально.

Я что-то пропущу, и кто-то знает, как многопоточность и будущие задания достаточно, чтобы помочь?

+2

Вам не хватает кода, который показывает проблему. Пожалуйста, покажите нам, как выглядит «Будущее». – Keppil

ответ

3

Итак, вы хотите заблокировать поток, пока не получите результат из будущего. Вам не нужно использовать цикл while, а прямо используйте future.get(), который будет блокироваться, пока вы не получите результат.

+0

Хороший момент, но это не помогает с проблемой OP. – Keppil

+0

OP не должен использовать цикл while для достижения требуемой функциональности. Вероятно, он не знает, как попасть. –

+0

Как я уже сказал, это хороший момент и хороший совет, но это не помогает ответить на вопрос. – Keppil

1

Если отменить будущее, прежде чем он начнет, он никогда не получит в isDone() == true

Из Javadoc для Future.isDone()

@return {истинного @code}, если эта задача была выполнена

Если вы не хотите использовать Future.get() вы могли бы сделать

while(!future.isDone() && !future.isCancelled()) { 
    Thread.yield(); 
} 
Смежные вопросы