インタビューの質問:
Java のロックについて何か知っていますか?ロックにはどのような種類がありますか?それらの違いは何ですか?教えて。
(学習ビデオ共有: Java ビデオ チュートリアル)
答え:
ロックとは何か、何に使うのか、ロックの種類、ロックの違いに大別できます。
1:ロックとは何ですか?また何に使用されますか?
ロックは主に、リソース共有の同期を実現するために使用されます。ロックを取得した後にのみ同期コードにアクセスできます。それ以外の場合は、他のスレッドがロックの使用を終了してロックを解放するのを待ちます。
2:どんな種類のロックがありますか?
ここでの主な焦点は、同期とロックです (インタビューではこの 2 つについて質問しているため)。
synchronize: メソッドの前に配置することも、コード ブロックの前に配置することもできますが、ロックされたオブジェクトを指定する必要があります。通常は、wait、notify、notifyAll と一緒に使用されます。 wait: 保持されていたオブジェクトのロックを解除し、CPU を解放します。 sleep: CPU を解放しますが、占有されているオブジェクトのロックは解放しません。
notify: 待機キュー内のスレッドを起動して、アクセス用のロックを取得できるようにします。
notifyAll: 待機キュー内のオブジェクト ロックを待っているすべてのスレッドを起動し、ロックを取得するために競合させます。
ロック: 同期と同じセマンティクスを持ちますが、割り込みロック待機や時限ロックなどの他の機能が追加されています。待機中なので、同期の代わりにロックを使用できます。提供されるメソッドは次のとおりです:
# (関連する面接の質問に関する推奨事項: Java 面接の質問と回答)
lock(): ブロック方式でロックを取得します。ロックが取得されなくなるまで待機し、中断されません。
tryLock(): 取得します。取得できれば true を返します。取得できなかった場合は返します。間違い。
tryLock(long timeout,TimeUnit単位): 取得された場合はtrueを返し、取得されなかった場合は指定された時間待機し、まだ取得されていない場合は、まだ取得されていない場合は false を返します。
lockInterruptibly(): ロックと似ていますが、ロックが取得されない場合は、ロックが取得されるまで休止状態に入ります。または現在のスレッドがブロックされているため、スレッドは中断されます。 3:
この 2 つの違いは何ですか?一貫性のないパフォーマンス: リソースの競合が動機付けられている場合、ロックのパフォーマンスは同期よりも優れていますが、競合が動機付けられていない場合は、ロックよりも同期のパフォーマンスが優れています。
ロック メカニズムは異なります。同期は JVM レベルで実装され、システムはロックが解放されたかどうかを監視します。ロックはコードに実装されており、finally ブロックで手動で解放する必要があります。ロックは非ブロック的な方法で取得できます。
使用法は異なります。同期はコード ブロックとメソッドで使用できます。ロックはコードを通じて実装され、より正確なスレッド セマンティクスを持ちます。
関連する推奨事項:
Java 入門チュートリアル以上がJavaインタビューロックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。