【发布时间】:2009-10-16 19:19:50
【问题描述】:
我有这段代码
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 使得同步毫无意义;但是,我的问题是锁定本地对象已得到解答。
【问题讨论】:
标签: java concurrency