¿Hay algún algoritmo que deba usar uno de ellos en su implementación?
Casi seguro que no. (De hecho, desde el punto de vista teórico, debe ser capaz de simular espera / informen mediante otra java.util.concurrent. . Clases. Y sincronizada podría ser reemplazado con las operaciones de bloqueo explícitas ... aunque usted tendría que tener cuidado de desbloqueo en finally
cláusulas)
Sin embargo, probablemente existan algoritmos en los que la implementación de mejor rendimiento en Java implique el uso directo de sincronizado, con o sin esperar y notificar.
¿Es hora de desaprobar sincronizado, esperar y notificar?
Independientemente de la respuesta a la pregunta anterior, la respuesta es definitivamente no.
La espera / notificación se puede usar (y a menudo se usa) correctamente. En Java, la desaprobación está reservada para clases y métodos que no funcionan; es decir, donde el uso continuado debe corregirse con urgencia. Si Sun (y ahora Oracle) desaprobara algo tan fundamental y tan utilizado como esperar / notificar, estarían creando un serio problema de compatibilidad para grandes cantidades de código heredado. Eso NO interesa a nadie.
Si desea deshacerse de sincronizado / esperar / notificar en su código, está bien. Pero la desaprobación exige la reescritura de grandes cantidades de código multiproceso esencialmente correcto, y eso sería una MALA IDEA. Los gerentes corporativos de TI y los gerentes de productos de software lo odiarían por sugerirlo ...
Vale la pena leer lo que significa "obsoleto" de acuerdo con la documentación de Java: http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
Y también tenga en cuenta que estamos hablando de desaprobar cosas que son fundamentales para el lenguaje Java. Depreciar synchronized
tiene enormes consecuencias.