访问保护/同步,用于大量读取但很少修改的集合?

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)

我遗漏了任何应用程序特定的废话,如处理关键冲突等.你得到的图片,非常简单.在运行时,映射在应用程序启动时填充实例.之后,地图很少被修改(一旦在蓝色的月亮,所以说).另一方面,经常查询地图,查询地图的多个线程相互阻塞.

是否有一种保护机制允许多个"读者"同时掌握地图,同时仍然只有一个"作家"?

Ara*_*ram 5

你看过JDK 5的广告ConcurrentHashMap吗?它适用于此用例