1. 静的メソッドと非静的メソッドに対する同期効果の違い
非静的メソッド:
オブジェクトをロックします (ロックと理解できます)オブジェクトのメモリがロックされています (このメモリのみ、他の同様のオブジェクトは独自のメモリ ロックを持つことに注意してください)。この時点で、複数の他のスレッドでオブジェクトの同期メソッドを実行すると (注意: それはオブジェクトです)、相互排他
静的メソッド: クラスのロックと同等 (*.class はコード領域にあり、静的メソッドは静的領域にあり、このクラスによって生成されたオブジェクトはこの静的メソッドを共有するため、Nオブジェクトはこのメモリを奪い合います)、
このとき、このクラスで生成されたオブジェクトである限り、この静的メソッドを呼び出すと相互排他が発生します。つまり、このクラスのすべてのオブジェクトはロックを共有します。
2. ロックの種類とは
(1) 楽観的ロックと悲観的ロック
(2) スピン ロックと非スピン ロック
(3) リエントラントロック&非リエントラントロック
(4) 無ロック&軽量ロック&バイアスロック&ヘビーウェイトロック
(5) 相互作用排他ロック&共有ロック
(6) 公平なロックと不公平なロック
3. スレッド同期のいくつかの方法
同期変更
volatile は同期を実現します (可視性のみが保証され、アトミック性は保証されません) )
ローカル変数を使用する ThreadLocal
アトミック クラスを使用する (AtomicInteger、AtomicBoolean...)
Lock を使用する
コンテナ クラスを使用する (BlockingQueue、ConcurrentHashMap)
4. synchronized メカニズムと lock メカニズムの違い
synchronized は、もともと使用されていた CPU 悲観的ロック メカニズム、つまりスレッドが排他的ロックを取得します。排他的ロックは、他のスレッドがロックを解放するまで待機するためにブロックのみに依存できることを意味します。
ロックは楽観的ロックを使用します。いわゆる楽観的ロックとは、毎回ロックを行わずに競合がないと仮定して操作を完了するもので、競合により失敗した場合は成功するまで再試行されます。楽観的ロックによって実装されるメカニズムは、CAS 操作 (比較と交換) です。
5. スレッド セーフティの問題について話す
スレッド セーフティはマルチスレッドの分野の問題です。スレッド セーフティは、単にメソッドまたはメソッドとして理解できます。マルチスレッド環境でも問題なく利用できるインスタンス。
Java マルチスレッド プログラミングでは、Java スレッド セーフを実現するための複数の方法が提供されています:
最も簡単な方法は、Synchronization キーワードを使用することです
Use java.util.Atomic Concurrent.atomic パッケージ内のクラス (AtomicInteger など)
java.util.concurrent.locks パッケージ内のロックを使用する
スレッドセーフなコレクションを使用するConcurrentHashMap
揮発性キーを使用する変数の可視性を確保するための言葉
以上がJava でのロックに関する面接の質問の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。