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

 N021039 发布于 2023-01-11 18:04

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

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

  try {
     r.run();
  } finally {
     unlock();
  }
}

这将允许程序员这样做

public class ThreadSafe {
  // Object requiring protection
  private final List 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();
  }
}

rxg.. 6

似乎这个问题的答案类似于相关问题的答案- 由于Runnablelambda创建的分配成本(参见Brian Goetz对请求的回应),它被视为"有吸引力的滋扰" .

好消息是这个请求有一个开放的错误,这意味着一旦JVM可以可靠地最小化分配成本,Oracle似乎愿意重新审视这个决定.

1 个回答
  • 似乎这个问题的答案类似于相关问题的答案- 由于Runnablelambda创建的分配成本(参见Brian Goetz对请求的回应),它被视为"有吸引力的滋扰" .

    好消息是这个请求有一个开放的错误,这意味着一旦JVM可以可靠地最小化分配成本,Oracle似乎愿意重新审视这个决定.

    2023-01-11 18:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有