- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
文档说 ehcache 是线程安全的。据我所知,如果 thread A
更新缓存,这些更新将始终对其他线程可见。
但我想知道 putAll
操作是否是线程安全的和原子的?比如说,我想通过调用 putAll
并传递具有实际值的 Map
来更新我的缓存。比如说,我想在更新缓存时从缓存中获取一些值。我会收到旧值还是等到缓存更新后收到新值?
最佳答案
当操作只能完全执行或根本不执行时,该操作是原子操作。根据Interface Ehcache putAll
操作不是原子的。
This method will throw a NullPointerException if a null element or null key is encountered in the collection, and a partial completion may result (as only some of the elements may have been put).
关于ehcache 是否线程安全。 Ehcache 被特别设计成线程安全的。以 Cache 为例实现。
Cache is threadsafe.
但要注意线程安全并不意味着同步。那有什么区别呢?
线程安全意味着一个类可以在多个线程中使用而不会出现任何错误或问题。
同步意味着一个或多个方法只能同时从一个线程使用。
在 putAll
的情况下意味着什么,让我们说一个 get
调用。这两种方法都是线程安全的,但它们不是同步的。
因此您无法确定线程 A 是否调用了 putAll
并且线程 B 调用了 get
之后 putAll
是否在 之前执行>得到
。
关于java - ehcache putAll 操作线程安全和原子化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39107727/
我是一名优秀的程序员,十分优秀!