Java の lock の使い方は?
Javaでは下記手順によってロックを使用できます:
- ReentrantLockクラスを使用してロックオブジェクトを作成します。
- ロックロック = 新しいReentrantLock()
- ロックを取得する:同期が必要なコードブロックの前にlock()メソッドを呼び出してロックを取得する。
- lock.ロック();
try {
// 同期ブロック
} finally {
// 例外時にもロック解放を確実に行うため、finallyブロックで解放を行う
lock.アンロック();
} - ロックを獲得後に、同期が必要な処理を同期ブロック内で行う。
- synchronized(lock) {
// 同期コードブロック
} - finally ブロックで unlock() メソッドを呼び出し、確実にロックを解除する。
- lock.アンロックする();
・ロックする対象を明示的に指定できる
- ロックの取得と解放をより柔軟に制御することができます。
- フェアロックとノンフェアロックを実現できます。
- 複数の条件(Condition)でスレッドの待機と再開を制御できます。
ロックを使用する際は、必ずロック取得後にはfinallyブロックでロックを解放してください。例外によりロックの解放ができなくなると、デッドロックになってしまします。