gpt4 book ai didi

java - 你能在 Java 中锁定本地对象吗?

转载 作者:行者123 更新时间:2023-11-29 07:22:50 25 4
gpt4 key购买 nike

我有这段代码

private Templates retrieveFromCache(String name) {
TemplatesWrapper t = xlCache.get(name);
synchronized(t){
if (!t.isValid()) {
xlCache.remove(name);
return null;
}
}
return t.getTemplate();
}

xlCache 是一个ConcurrentHashMap;我在 t 上同步的原因是,当线程 1 验证谓词线程 2 已经从映射中删除对象时,2 个线程可以交错,然后 NullPointerException 将被抛出。 我的假设是否正确,因为我知道并发性是更难推理的事情之一。然后是我最初的问题,即使 t 是本地的,我也可以锁定吗?

这也是从 public 方法中调用的 private 方法,这会造成差异吗?

编辑:我最初认为抛出 NullPointerException 的前提是不正确的,因为 remove() 返回 boolean 使得同步没有意义;然而,我关于锁定本地对象的问题得到了解答。

最佳答案

ConcurrentHashMap(和一般的 Map/ConcurrentMap)如果指定的键不存在则不会抛出异常。这就是为什么 remove 方法返回一个 boolean,以指示是否有任何内容实际删除。

但是,是的,您可以锁定局部变量。毕竟,您实际上是通过引用(以及与引用对象关联的监视器)而不是变量进行锁定 - 并且其他同时运行的方法将具有相同的引用。

关于java - 你能在 Java 中锁定本地对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579910/

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