点燃缓存线程安全吗?

时间:2017-05-16 14:35:05

标签: java multithreading caching ignite

我计划从多个线程同时加载缓存。最简单的形式是:

IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache("ints");
ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for (int i = 0; i < 20000000; i++) {
    int t = i;
    es.submit(() -> {
         cache.put(t, t);
    });
}

这样做是否安全?我阅读了该方法的文档:

  

将指定的值与缓存中的指定键相关联。如果   Cache之前包含键的映射,旧值是   替换为指定的值。 (据说缓存c包含一个   当且仅当c.containsKey(k)将返回时,映射键k   真。)

没有关于线程安全的任何说法。那么同时放入IgniteCache是否安全?

2 个答案:

答案 0 :(得分:9)

答案是肯定的,所有Ignite API都是线程安全的,可以从多个线程同时使用。

然而,进行单独放置并不是进行数据加载的有效方法,因此有更好的技术。有关详细信息,请参阅此页面:https://apacheignite.readme.io/docs/data-loading

答案 1 :(得分:2)

是的,所有IgniteCache方法都是线程安全的,大多数其他API都是如此。