CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第3章 ラムダ式を使ったプログラミング : 問題 2 : ReentrantLock

問題 2

java.util.concurrent.locksReentrantLockを使用する場合には、次のイデオムでロックとアンロックをする必要がある。

myLock.lock();
try {
    何らかの処理
} finally {
    myLock.unlock();
}

次のように呼び出すことができるwithLockメソッドを提供せよ

withLock(myLock, () -> { 何らかの処理 })

解答

public static void withLock(ReentrantLock lock, Runnable runner) {
    lock.lock();
    try {
        runner.run();
    } finally {
        lock.unlock();
    }
}