首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ehcache putAll操作线程安全和原子化吗?

问ehcache putAll操作线程安全和原子化吗?
EN

Stack Overflow用户
提问于 2016-08-23 17:48:13
回答 1查看 1.1K关注 0票数 2

文档说ehcache是线程安全的。因此,据我所知,如果thread A更新缓存,这些更新将始终对其他线程可见。

但是我想知道putAll操作是否线程安全和原子化?比方说,我只想通过调用putAll并传递一个具有实际值的Map来更新缓存。比方说,我希望在更新缓存时从缓存中获得一些值。我会接收旧值还是等待缓存更新并接收新值?

EN

回答 1

Stack Overflow用户

发布于 2016-08-27 15:38:31

当操作只能完全执行或根本不执行时,操作是原子的。根据接口Ehcache,putAll操作不是原子操作。

如果集合中遇到一个空元素或空键,则此方法将抛出一个NullPointerException,并且可能会导致部分完成(因为可能只放置了一些元素)。

关于ehcache是否是线程安全的问题。Ehcache是专为线程安全设计的。以缓存实现为例。

缓存是线程安全。

但是小心线程安全并不意味着同步。那有什么区别?

Threadsafe意味着一个类可以从多个线程中使用,没有任何错误或问题。

同步意味着只能从一个线程同时使用一个或多个方法。

在putAll的情况下,这意味着什么,让我们说一个get调用。这两种方法都是线程安全的,但它们不是同步的。

因此,您无法确定线程A是否调用putAll,线程B随后是否调用get,putAll是否在get之前执行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39107727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档