首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java 8没有在`java.util.concurrent.locks.Lock`接口中添加“WithLock‘默认方法”?

为什么Java 8没有在`java.util.concurrent.locks.Lock`接口中添加“WithLock‘默认方法”?
EN

Stack Overflow用户
提问于 2014-06-04 09:51:56
回答 1查看 1.1K关注 0票数 7

按照与这个问题相同的思路,我想知道为什么Java不向锁定接口添加一些默认方法,如下所示:

代码语言:javascript
复制
public default void withLock(Runnable r) {
  lock();

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

这将使程序员能够完成

代码语言:javascript
复制
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())); });
  }
}

而不是

代码语言:javascript
复制
public void threadSafeMethod {
  lock.lock();
  try {
    System.out.println(l.get(l.size())); 
  } finally { 
    lock.unlock();
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-04 09:51:56

这个问题的答案似乎与关联问题的答案类似--由于从lambda创建的Runnable的分配成本(请参见请求的布赖恩·戈茨的答复 ),它被认为是一个“有吸引力的麻烦”。

好消息是,这个请求有打开的臭虫,这意味着一旦JVM能够可靠地最小化分配成本,Oracle似乎愿意重新考虑这一决定。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24034240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档