Java同時8:locksのLock、ReadWriteLock、Conditionインタフェース
1123 ワード
一、ロックインタフェース
JDK 1.5まではsynchronizedキーワードしかロックできませんでした.マルチスレッドの場合、synchronizedキーワードによってコードのセグメントが修飾されると、同じ時点で1つのスレッドのみがアクセスでき、他のスレッドは、ロックが解除されるのを待ってから、ロックがコードブロックに入る機会を得る必要があります.synchronizedロックを持つスレッド解放ロックには、1、コードブロック実行完了解放ロックの2つのケースがある.2、コードブロックを実行するスレッドは異常解放ロックを放出する.
もし1つのスレッドがIO操作を実行したり、Sleepがロックを解放しなかったりしている場合、他のロックを取得したいスレッドはずっとブロックして待っていなければなりません.このような状況はシステムリソースを非常に浪費し、プログラムがクラッシュする可能性があります.
では、このような状況を避ける方法はありますか?JDK 1.5 Doug Lea大神はロックインターフェースに参加しました.ロックインターフェースを見てみましょう.
ロックインタフェースはsynchronizedの拡張版と見なすことができ、より柔軟な機能を提供します.このインタフェースは、非ブロック、割り込み可能、タイムアウト可能にロックを取得するなどの機能を提供する.
JDK 1.5まではsynchronizedキーワードしかロックできませんでした.マルチスレッドの場合、synchronizedキーワードによってコードのセグメントが修飾されると、同じ時点で1つのスレッドのみがアクセスでき、他のスレッドは、ロックが解除されるのを待ってから、ロックがコードブロックに入る機会を得る必要があります.synchronizedロックを持つスレッド解放ロックには、1、コードブロック実行完了解放ロックの2つのケースがある.2、コードブロックを実行するスレッドは異常解放ロックを放出する.
もし1つのスレッドがIO操作を実行したり、Sleepがロックを解放しなかったりしている場合、他のロックを取得したいスレッドはずっとブロックして待っていなければなりません.このような状況はシステムリソースを非常に浪費し、プログラムがクラッシュする可能性があります.
では、このような状況を避ける方法はありますか?JDK 1.5 Doug Lea大神はロックインターフェースに参加しました.ロックインターフェースを見てみましょう.
ロックインタフェースはsynchronizedの拡張版と見なすことができ、より柔軟な機能を提供します.このインタフェースは、非ブロック、割り込み可能、タイムアウト可能にロックを取得するなどの機能を提供する.
public interface Lock {
// , , 。
void lock();
// ,