Zastanawiam się, dlaczego wątki spontanicznie budzą się z wait() w java.
Czy to decyzja projektowa? Czy to kompromis?Dlaczego wątki spontanicznie budzą się z wait()?
EDIT: (. Z Java współbieżności w Praktyce, str 300)
wait
nawet pozwolono powrócić "fałszywie" - nie w odpowiedzi na wątku wywołującego zawiadomić.
Dalsze stan autorzy:
to jest jak toster z luźnym połączenie sprawia, że dzwon zgaśnie gdy tost jest gotowy, ale również czasami, gdy nie jest gotowy.
Dlatego zawsze trzeba kodować jak
synchronized(this){
while(!condition)
wait();
}
}
i nigdy
synchronized(this){
if(!condition){
wait();
}
}
Nawet jeśli tylko stan przejścia od false
do true
.
Nie, proszę odwołać się do mojej edycji .. –
W porządku, usunąłem swój komentarz, ponieważ wygląda na to, że masz rację. –