【发布时间】:2012-07-09 05:01:24
【问题描述】:
我正在寻找有关同步块的说明。考虑这个类 -
public class A{
Map map;
public getValue(String key){
return map.get(key);
}
public remove(String key){
synchronized(map){
map.remove(key);
}
}
}
A 是一个单例。 getValue 在整个应用程序中被多个线程大量访问。我正在添加一个新方法 remove,它从地图中删除一个键。如果按上述方式实现remove,则
- 当一个线程在 remove 方法的同步块中时,我假设它会在 map 对象上获得一个锁。这是否意味着尝试通过 getValue 方法访问地图的其他线程将被阻止? (我希望他们这样做。)
- 当 remove 方法的同步块中没有线程时,访问 getValue 方法的线程是否会照常运行,即不会相互阻塞? (我也想要)。
我希望 getValue 线程仅在有线程执行删除操作时才阻塞。
【问题讨论】:
-
只有同步的块才会阻塞。
标签: java synchronization