Gibt es einen Algorithmus, der einen davon in seiner Implementierung verwenden muss?
Mit ziemlicher Sicherheit nicht. ( In der Tat, aus der theoretischen Perspektive, sollten Sie simulieren warten können / notify anderen java.util.concurrent verwenden. . Klassen. Und synchronisiert konnten mit expliziten Sperroperationen ersetzt werden ... obwohl man vorsichtig entriegeln sein müßte in finally
Klauseln.)
Es gibt jedoch wahrscheinlich Algorithmen, bei denen die leistungsstärkste Implementierung in Java die direkte Verwendung von synchronisiert mit oder ohne Warten und Benachrichtigen umfasst.
Ist es an der Zeit, synchronisiert abzulehnen, zu warten und zu benachrichtigen?
Unabhängig von der Antwort auf die vorherige Frage lautet die Antwort definitiv nein.
Das Warten / Benachrichtigen kann (und wird oft) korrekt verwendet. In Java ist die Nichtbeachtung für defekte Klassen und Methoden reserviert. dh wo eine fortgesetzte Verwendung dringend korrigiert werden sollte. Wenn Sun (und jetzt Oracle) etwas so Grundlegendes und weit verbreitetes wie wait / notify ablehnen würde, würde dies ein ernstes Kompatibilitätsproblem für große Mengen an altem Code schaffen. Das ist NICHT im Interesse von irgendjemandem.
Wenn Sie synchronized / wait / notify in Ihrem Code loswerden möchten, ist das in Ordnung. Aber Verfall erfordert das Umschreiben großer Mengen von im Wesentlichen korrektem Multithread-Code, und das wäre eine SCHLECHTE IDEE. IT-Manager und Software-Produktmanager in Unternehmen hassen es, wenn Sie dies vorschlagen ...
Es lohnt sich zu lesen , was „veraltet“ Mittel entsprechend der Java - Dokumentation: http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
Beachten Sie auch, dass wir über das Abwerten von Dingen sprechen, die für die Java-Sprache von zentraler Bedeutung sind. Abwertung synchronized
hat enorme Konsequenzen.