以下は、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()」