AtomicInteger lazySet与set
lazySet
和的set
方法有AtomicInteger
什么区别?该文档没有太多关于lazySet
:
最终设置为给定值。
似乎存储的值不会立即设置为所需值,而是计划在将来的某个时间设置。但是,这种方法的实际用途是什么?有什么例子吗?
回答:
直接引自“
JDK-6275329:向原子类添加lazySet方法”:
作为Mustang的最后一个JSR166后续文章,我们向Atomic类(AtomicInteger,AtomicReference等)添加了“
lazySet”方法。这是一种利基方法,在使用非阻塞数据结构微调代码时,有时会很有用。语义是保证写操作不会与任何先前的写操作重新排序,而是可以与后续操作重新排序(或等效地,可能对其他线程不可见),直到发生其他一些易失性写操作或同步操作为止。
主要用例是仅出于避免长期垃圾保留的目的,使非阻塞数据结构中的节点字段无效。如果其他线程在一段时间内看到非null值是无害的,则可以使用它,但是您要确保结构最终可用于GC。在这种情况下,可以避免空volatile写入的开销,从而获得更好的性能。这些基于非引用的原子还有其他一些用例,因此所有AtomicX类都支持该方法。
对于喜欢从通用多处理器的机器级别障碍来考虑这些操作的人们,lazySet提供了一个先行的存储障碍(在当前平台上是空运或非常便宜的),但是没有存储负载障碍(通常是易失性写入的昂贵部分)。
以上是 AtomicInteger lazySet与set 的全部内容, 来源链接: utcz.com/qa/403673.html