Dur*_*dal 0 java synchronization
让我们说我有一个简单的地图,经常被查询,但只是偶尔修改.目前我正在使用synchronized块来防止在添加到地图时遇到竞争条件(简化示例):
public class MyRepository {
private static HashMap<Integer, Object> MAP = new HashMap<Integer, Object>();
public static Object getInstance(Integer key) {
synchronized (MAP) {
return MAP.get(key);
}
}
public static void addInstance(Integer key, Object instance) {
synchronized (MAP) {
MAP.put(key, instance);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我遗漏了任何应用程序特定的废话,如处理关键冲突等.你得到的图片,非常简单.在运行时,映射在应用程序启动时填充实例.之后,地图很少被修改(一旦在蓝色的月亮,所以说).另一方面,经常查询地图,查询地图的多个线程相互阻塞.
是否有一种保护机制允许多个"读者"同时掌握地图,同时仍然只有一个"作家"?