Ecco alcune domande che ho recentemente chiesto agli intervistati che affermano di conoscere la concorrenza Java:
- Spiegare il rischio di "visibilità della memoria" - il modo in cui la JVM può riordinare determinate operazioni su variabili non protette da un monitor e non dichiarate
volatile
, in modo che un thread non possa vedere le modifiche apportate da un altro thread. Di solito chiedo questo mostrando il codice in cui è presente questo rischio (ad esempio l'esempioNoVisibility
nel Listato 3.1 da "Concurrency in Practice Java" di Goetz et al) e chiedendo cosa c'è che non va. - Spiega in che modo
volatile
influenza non solo la variabile effettiva dichiaratavolatile
, ma anche eventuali modifiche alle variabili apportate da un thread prima che cambi la variabilevolatile
. - Perché potresti utilizzare
volatile
anzichésynchronized
? - Implementa una variabile di condizione con
wait()
enotifyAll()
. Spiega perché dovresti usarenotifyAll()
. Spiega perché la variabile condizione deve essere testata con un ciclowhile
.
La mia domanda è: sono appropriati o troppo avanzati per chiedere a qualcuno che dice di conoscere la concorrenza Java?
E mentre ci siamo, pensi che qualcuno che lavora nella concorrenza Java dovrebbe avere una conoscenza superiore alla media della garbage collection di Java?