Hier sind einige Fragen, die ich kürzlich Befragten gestellt habe, die angeben, Java-Parallelität zu kennen:
- Erläutern Sie die Gefahr der "Speichersichtbarkeit" - wie die JVM bestimmte Vorgänge für Variablen neu anordnen kann, die von einem Monitor ungeschützt und nicht deklariert sind
volatile
, sodass ein Thread möglicherweise die von einem anderen Thread vorgenommenen Änderungen nicht sieht. Normalerweise frage ich diesen Code, indem ich zeige, wo diese Gefahr vorliegt (z. B. dasNoVisibility
Beispiel in Listing 3.1 aus "Java Concurrency in Practice" von Goetz et al.) Und frage, was falsch ist. - Erklären Sie, wie
volatile
sich dies nicht nur auf die tatsächlich deklarierte Variable auswirktvolatile
, sondern auch auf alle Änderungen an Variablen, die von einem Thread vorgenommen wurden, bevor er dievolatile
Variable ändert . - Warum könnten Sie
volatile
anstelle von verwendensynchronized
? - Implementieren Sie eine Bedingungsvariable mit
wait()
undnotifyAll()
. Erklären Sie, warum Sie verwenden solltennotifyAll()
. Erklären Sie, warum die Bedingungsvariable mit einerwhile
Schleife getestet werden soll .
Meine Frage ist - sind diese angemessen oder zu fortgeschritten, um jemanden zu fragen, der sagt, er kenne die Java-Parallelität?
Und wenn wir schon dabei sind, sollte jemand, der in der Java-Parallelität arbeitet, überdurchschnittliche Kenntnisse über die Java-Garbage-Collection haben?
notifyAll()
zu "Ich glaube nicht, dass ich die Arbeit des OS-Schedulers notify()