点燃缓存线程安全吗?
Is ignite cache thread safe?
我计划从多个线程同时加载缓存。最简单的形式是:
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);
});
}
这样做安全吗?我阅读了该方法的文档:
Associates the specified value with the specified key in the cache. If
the Cache previously contained a mapping for the key, the old value is
replaced by the specified value. (A cache c is said to contain a
mapping for a key k if and only if c.containsKey(k) would return
true.)
没有任何关于线程安全的说法。那么同时放入IgniteCache
安全吗?
是的,与大多数其他 API 一样,所有 IgniteCache
方法都是线程安全的。
答案是肯定的,所有 Ignite API 都是线程安全的,可以从多个线程并发使用。
但是,进行单独的放置并不是进行数据加载的有效方法,对此有更好的技术。详情请参考本页:https://apacheignite.readme.io/docs/data-loading
我计划从多个线程同时加载缓存。最简单的形式是:
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);
});
}
这样做安全吗?我阅读了该方法的文档:
Associates the specified value with the specified key in the cache. If the Cache previously contained a mapping for the key, the old value is replaced by the specified value. (A cache c is said to contain a mapping for a key k if and only if c.containsKey(k) would return true.)
没有任何关于线程安全的说法。那么同时放入IgniteCache
安全吗?
是的,与大多数其他 API 一样,所有 IgniteCache
方法都是线程安全的。
答案是肯定的,所有 Ignite API 都是线程安全的,可以从多个线程并发使用。
但是,进行单独的放置并不是进行数据加载的有效方法,对此有更好的技术。详情请参考本页:https://apacheignite.readme.io/docs/data-loading