Esiste un algoritmo che deve utilizzarne uno nella sua implementazione?
Quasi certamente no. (In effetti, dal punto di vista teorico, si dovrebbe essere in grado di aspettare simulare / notify utilizzando altri java.util.concurrent. . Classi. E sincronizzati potrebbe essere sostituito con le operazioni di blocco esplicito ... anche se si avrebbe bisogno di stare attenti a sbloccare in finally
clausole.)
Tuttavia, ci sono probabilmente algoritmi in cui l'implementazione con le migliori prestazioni in Java comporta l'uso diretto di sincronizzato, con o senza attesa e notifica.
È tempo di deprecare sincronizzato, attendere e notificare?
Indipendentemente dalla risposta alla domanda precedente, la risposta è decisamente no.
L'attesa / notifica può essere (e spesso viene) utilizzata correttamente. In Java, la deprecazione è riservata alle classi e ai metodi non funzionanti; vale a dire dove l'uso continuato deve essere corretto con urgenza. Se Sun (e ora Oracle) deprecasse qualcosa di così fondamentale e ampiamente utilizzato come wait / notification, avrebbero creato un grave problema di compatibilità per enormi quantità di codice legacy. Questo NON è nell'interesse di nessuno.
Se vuoi sbarazzarti della sincronizzazione / attendere / notifica nel tuo codice, va bene. Ma la deprecazione richiede la riscrittura di grandi quantità di codice multi-thread essenzialmente corretto, e questa sarebbe una CATTIVA IDEA. I responsabili IT aziendali e i responsabili dei prodotti software ti odieranno per averlo suggerito ...
Vale la pena leggere cosa significa "deprecato" secondo la documentazione Java: http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
E nota anche che stiamo parlando di deprecare cose che sono fondamentali nel linguaggio Java. L'ammortamento synchronized
ha conseguenze enormi.