Is there any algorithm that must use one of them in its implementation?
Quasi certamente no. (In effetti, dal punto di vista teorico, dovresti essere in grado di simulare l'attesa / notifica usando altre classi java.util.concurrent. . e sincronizzato potrebbe essere sostituito con operazioni di blocco esplicite ... sebbene tu voglia bisogna stare attenti a sbloccare in% clausole difinally
.)
Tuttavia, ci sono algoritmi probabilmente in cui l'implementazione migliore in Java implica l'uso diretto di sincronizzati, con o senza attesa e notifica.
Is it time to deprecate synchronized, wait and notify?
Indipendentemente dalla risposta alla domanda precedente, la risposta è decisamente no.
L'attesa / notifica può essere (e spesso utilizzata) correttamente. In Java, la deprecazione è riservata per classi e metodi che sono infranti; vale a dire dove l'uso continuato deve essere corretto con urgenza. Se Sun (e ora Oracle) deprecasse qualcosa di fondamentale e ampiamente utilizzato come wait / notify, creerebbe un serio problema di compatibilità con enormi quantità di codice legacy. Questo NON è nell'interesse di nessuno.
Se vuoi eliminare sincronizzato / wait / notify nel tuo codice, va bene. Ma la deprecazione richiede la riscrittura di grandi quantità di codice multi-threaded essenzialmente corretto, e questa sarebbe un'IDEA BAD. I responsabili IT aziendali e i responsabili dei prodotti software ti odiano per averlo suggerito ...
Vale la pena leggere cosa "deprecato" significa secondo la documentazione di Java: link
E notiamo anche che stiamo parlando di cose deprecating che sono fondamentali per il linguaggio Java. Deprecating synchronized
ha enormi conseguenze.