E 'tempo di deprecare sincronizzato, aspettare e notificare?

12

Esiste un singolo scenario (diverso dalla compatibilità con le JVM antiche) in cui l'utilizzo di synchronized è preferibile all'utilizzo di Lock ? Qualcuno può giustificare l'utilizzo di wait o notify sui sistemi più recenti?

Esiste un algoritmo che deve utilizzare uno di questi nella sua implementazione?

Vedo le domande precedenti che hanno toccato questo argomento, ma vorrei fare un po 'di più e in realtà deprecate li. Ci sono troppe trappole e insidie e caveat con loro che sono state risolte con le nuove strutture. Sento che potrebbe presto essere il momento di contrassegnarli obsoleti.

    
posta OldCurmudgeon 21.11.2012 - 23:56
fonte

1 risposta

10

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.

    
risposta data 24.11.2012 - 03:48
fonte

Leggi altre domande sui tag