Czy istnieje algorytm, który musi wykorzystywać jeden z nich w swojej implementacji?
Prawie na pewno nie. (Rzeczywiście, z perspektywy teoretycznej, powinieneś być w stanie symulować wait / notify pomocą innego java.util.concurrent. . Klas. I zsynchronizowane można zastąpić wyraźnych działań zamków ... choć trzeba by uważać, aby odblokować w finally
klauzule).
Jednakże, istnieje prawdopodobnie algorytmy gdzie najlepiej wykonując implementacja w Javie polega na bezpośrednie wykorzystanie zsynchronizowane, z lub bez czekać i powiadomić.
Czy nadszedł czas, aby przestać synchronizować, czekać i powiadamiać?
Niezależnie od odpowiedzi na poprzednie pytanie, odpowiedź jest zdecydowanie przecząca.
Funkcja oczekiwania / powiadomienia może być (i często jest) używana poprawnie. W Javie wycofanie jest zarezerwowane dla uszkodzonych klas i metod; tzn. gdy dalsze stosowanie powinno zostać skorygowane w trybie pilnym. Gdyby Sun (a teraz Oracle) wycofał coś tak fundamentalnego i tak powszechnego, jak czekanie / powiadamianie, tworzyłby poważny problem ze zgodnością dla dużej ilości starszego kodu. To NIE jest w niczyim interesie.
Jeśli chcesz pozbyć się zsynchronizowanego / czekaj / powiadom w swoim kodzie, to jest w porządku. Ale wycofanie wymaga przepisania dużej ilości zasadniczo poprawnego kodu wielowątkowego, a to byłby ZŁY POMYSŁ. Menedżerowie IT firmy i menedżerowie oprogramowania nienawidzą cię za sugerowanie tego ...
Warto przeczytać, co oznacza „przestarzałe” zgodnie z dokumentacją Java: http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
Zauważ też, że mówimy o wycofywaniu rzeczy, które są rdzeniem języka Java. Przestarzałe synchronized
ma ogromne konsekwencje.