小编rxg*_*rxg的帖子

为什么Java 8没有将`withLock`默认方法添加到`java.util.concurrent.locks.Lock`接口?

这个问题一样,我想知道为什么Java团队没有为Lock接口添加一些默认方法,如下所示:

public default void withLock(Runnable r) {
  lock();

  try {
     r.run();
  } finally {
     unlock();
  }
}
Run Code Online (Sandbox Code Playgroud)

这将允许程序员这样做

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())); });
  }
}
Run Code Online (Sandbox Code Playgroud)

代替

public void threadSafeMethod {
  lock.lock();
  try {
    System.out.println(l.get(l.size())); 
  } finally { 
    lock.unlock();
  }
}
Run Code Online (Sandbox Code Playgroud)

locking java-8 default-method

6
推荐指数
1
解决办法
871
查看次数

标签 统计

default-method ×1

java-8 ×1

locking ×1