この質問と同じように、Java チームがLockインターフェースに次のようないくつかのデフォルト メソッドを追加しなかったのはなぜだろうかと思います。
public default void withLock(Runnable r) {
lock();
try {
r.run();
} finally {
unlock();
}
}
これにより、プログラマーは次のことができるようになります
public class ThreadSafe {
// Object requiring protection
private final List<String> l = new ArrayList<>();
private final Lock lock = new ReentrantLock();
public void mutate(String s) {
lock.withLock(() -> l.add(s));
}
public void threadSafeMethod {
lock.withLock(() -> { System.out.println(l.get(l.size())); });
}
}
それ以外の
public void threadSafeMethod {
lock.lock();
try {
System.out.println(l.get(l.size()));
} finally {
lock.unlock();
}
}