Voici quelques questions que j'ai récemment posées aux personnes interrogées qui disent connaître la concurrence Java:
- Expliquez le danger de la «visibilité de la mémoire» - la façon dont la machine virtuelle Java peut réorganiser certaines opérations sur des variables qui ne sont pas protégées par un moniteur et non déclarées
volatile
, de sorte qu'un thread peut ne pas voir les modifications apportées par un autre thread. Habituellement, je demande à celui-ci en montrant le code où ce danger est présent (parNoVisibility
exemple l' exemple dans le Listing 3.1 de "Java Concurrency in Practice" par Goetz et al) et en demandant ce qui ne va pas. - Expliquez comment
volatile
affecte non seulement la variable réelle déclaréevolatile
, mais également toutes les modifications apportées aux variables par un thread avant qu'il ne modifie lavolatile
variable. - Pourquoi pourriez-vous utiliser à la
volatile
place desynchronized
? - Implémentez une variable de condition avec
wait()
etnotifyAll()
. Expliquez pourquoi vous devriez utilisernotifyAll()
. Expliquez pourquoi la variable de condition doit être testée avec unewhile
boucle.
Ma question est - est-ce approprié ou trop avancé pour demander à quelqu'un qui dit qu'il connaît la concurrence Java?
Et pendant que nous y sommes, pensez-vous qu'une personne travaillant dans la concurrence Java devrait avoir une connaissance supérieure à la moyenne de la collecte des ordures Java?
notifyAll()
de "Je ne crois pas au travail du planificateur du système d'exploitation, donc j'utilise notify()
"