以下は、Javaの並行性を知っていると言っているインタビュー対象者に最近尋ねた質問です。
- 「メモリの可視性」の危険性-JVMがモニターによって保護されておらず宣言されていない変数に対する特定の操作を並べ替える方法
volatile
。1つのスレッドが別のスレッドによる変更を認識できないようにする方法。通常、このハザードが存在する場所にコードNoVisibility
を表示し(例:Goetz et alの「Java Concurrency in Practice」のリスト3.1 の例)、何が問題なのかを尋ねることでこれを要求します。 volatile
宣言された実際の変数だけでなく、変数がvolatile
変更する前にスレッドによって行われた変数への変更にも影響することを説明しvolatile
ます。- なぜ
volatile
代わりに使用するのsynchronized
でしょうか? wait()
およびで条件変数を実装しますnotifyAll()
。を使用する理由を説明しますnotifyAll()
。条件変数をwhile
ループでテストする必要がある理由を説明します。
私の質問は-これらは適切であるか、Javaの並行性を知っていると言う人に尋ねるには高度すぎるのでしょうか?
そして、私たちがそれに取り組んでいる間、Javaの並行性で働いている誰かがJavaガベージコレクションの平均以上の知識を持っていると期待されるべきだと思いますか?
notifyAll()
と「私が使用して私は、OSのスケジューラの仕事をして信じていないnotify()
」