I'm trying to understand something that I still can not get right because of that.
In my dsd book, it presents the following statement
Nos monitores de Hoare, se uma thread (dentro do monitor) executa x.notify(), o monitor é cedido para uma das threads acordadas. Isto permite que a thread execute
if(!B) x.wait();
para aguardar pelo estabelecimento da condição B (quando a thread retomar a execução é certo que B permanece verdadeiro).
• Nos monitores Java, a thread que executa x.notify() permanece dentro do monitor; a thread acordada só prossegue quando a primeira dexar o monitor. Isto exige que o teste da condição B seja feito da seguinte forma:
while(!B) x.wait();
pois B pode ter mudado quando a thread acordada retomar a execução
Even with this explanation, I still can not understand why the Java monitors use While (! B) and in the Hoare monitors use if (! B)