Class A {
private Map<Oject,Object> map;
public void clear() {
map.clear();
}
public void work() {
synchronized (map) {
map.put(new Object, new Object();
}
}
}
如果线程 A 在 work()
方法的中间,这是否意味着线程 B 在执行 clear()
方法时不会阻塞?
上面的代码和上面的代码有什么区别?
public void clear() {
synchronized (map) {
map.clear();
}
}
最佳答案
您的怀疑是正确的;此代码有错误。
您还需要锁定 clear()
;否则;您仍然可以同时运行 put()
和 clear()
。
但是,实际上您应该使用 ConcurrentHashMap()
。
关于java - 当一个对象的使用只在一个地方出现同步块(synchronized block)时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267526/