Existe-t-il un algorithme qui doit utiliser l'un d'eux dans sa mise en œuvre?
Certainement pas. ( En effet, du point de vue théorique, vous devriez être en mesure de simuler attente / notify à l' aide d' autres java.util.concurrent. . Classes. Et synchronisées pourrait être remplacé par Lock explicites opérations ... mais vous devez être prudent pour déverrouiller en finally
clauses.)
Cependant, il existe probablement des algorithmes où l'implémentation la plus performante en Java implique l'utilisation directe de synchronisé, avec ou sans attente et notification.
Est-il temps de déprécier synchronisé, d'attendre et de notifier?
Quelle que soit la réponse à la question précédente, la réponse est définitivement non.
L'attente / notification peut être (et est souvent) utilisée correctement. En Java, la dépréciation est réservée aux classes et méthodes qui sont cassées; c'est-à-dire lorsque l'utilisation continue doit être corrigée de toute urgence. Si Sun (et maintenant Oracle) déconseillait quelque chose d'aussi fondamental et aussi largement utilisé que l'attente / la notification, cela créerait un grave problème de compatibilité pour d'énormes quantités de code hérité. Ce n'est dans l'intérêt de personne.
Si vous voulez vous débarrasser de synchronized / wait / notify dans votre code, c'est très bien. Mais la dépréciation appelle la réécriture de grandes quantités de code multithread essentiellement correct, et ce serait une MAUVAISE IDÉE. Les responsables informatiques et les responsables de produits logiciels vous détesteraient de l' avoir suggéré ...
Il vaut la peine de lire ce que signifie "obsolète" selon la documentation Java: http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
Et notez également que nous parlons de déprécier des éléments qui sont au cœur du langage Java. La dépréciation synchronized
a d'énormes conséquences.