我正在寻找有关同步块的说明。考虑这个类 -
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 线程仅在有执行删除操作的线程时才阻塞。