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'esempioNoVisibilitynel Listato 3.1 da "Concurrency in Practice Java" di Goetz et al) e chiedendo cosa c'è che non va. - Spiega in che modo
volatileinfluenza non solo la variabile effettiva dichiaratavolatile, ma anche eventuali modifiche alle variabili apportate da un thread prima che cambi la variabilevolatile. - Perché potresti utilizzare
volatileanziché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?