gpt4 book ai didi

locking - 为什么 Java 8 没有在 `withLock` 接口(interface)中添加 `java.util.concurrent.locks.Lock` 默认方法?

转载 作者:行者123 更新时间:2023-12-03 23:56:48 25 4
gpt4 key购买 nike

this question 相同,不知道为什么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();
}
}

最佳答案

这个答案似乎与 the linked question 的答案相似。 - 由于 Runnable 的分配成本,它被认为是“令人讨厌的麻烦”从 lambda 创建(见 Brian Goetz's response 到请求)。

好消息是有an open bug对于这个请求,这意味着一旦 JVM 能够可靠地最小化分配成本,Oracle 似乎愿意重新考虑这个决定。

关于locking - 为什么 Java 8 没有在 `withLock` 接口(interface)中添加 `java.util.concurrent.locks.Lock` 默认方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com