当前位置: 首页 > 面试题库 >

AtomicInteger lazySet与set

慕光霁
2023-03-14
问题内容

lazySet和的set方法有AtomicInteger什么区别?该文档没有太多关于lazySet

最终设置为给定值。

似乎存储的值不会立即设置为所需值,而是计划在将来的某个时间设置。但是,这种方法的实际用途是什么?有什么例子吗?


问题答案:

直接引自“
JDK-6275329:向原子类添加lazySet方法”

作为Mustang的最后一个JSR166后续文章,我们向Atomic类(AtomicInteger,AtomicReference等)添加了“
lazySet”方法。这是一种利基方法,在使用非阻塞数据结构微调代码时,有时会很有用。语义是保证写操作不会与任何先前的写操作重新排序,而是可以与后续操作重新排序(或等效地,可能对其他线程不可见),直到发生其他一些易失性写操作或同步操作为止。

主要用例是仅出于避免长期垃圾保留的目的,使非阻塞数据结构中的节点字段无效。如果其他线程在一段时间内看到非null值是无害的,则可以使用它,但是您要确保结构最终可用于GC。在这种情况下,可以避免空volatile写入的开销,从而获得更好的性能。这些基于非引用的原子还有其他一些用例,因此所有AtomicX类都支持该方法。

对于喜欢从通用多处理器的机器级别障碍来考虑这些操作的人们,lazySet提供了一个先行的存储障碍(在当前平台上是空运或非常便宜的),但是没有存储负载障碍(通常是易失性写入的昂贵部分)。



 类似资料:
  • 问题内容: Node.js版本0.10已于今天发布并引入。该API的变化文档建议做递归时使用它调用。 从MDN所说的来看,它与。 什么时候应该使用?什么时候应该使用? 问题答案: 如果要将函数放在事件队列中已经存在的任何I/O事件回调后面,请使用此函数。用于将函数有效地放在事件队列的开头,以便在当前函数完成后立即执行。 因此,在您尝试使用递归分解长时间运行且受CPU限制的作业的情况下,您现在想使用

  • 问题内容: 我开始使用Python。我已经添加了和我的项目。但是,我仍然对两个文件的目的感到困惑。我读过,它是为可再发行的事物而设计的,并且是为不可再发行的事物而设计的。但是我不确定这是正确的。 如何真正使用这两个文件? 问题答案: : 这可以帮助您设置开发环境。 诸如此类的程序可用于一次安装文件中列出的所有软件包。之后,您可以开始开发python脚本。如果您计划让其他人参与开发或使用虚拟环境,则

  • 在C语言中,假设每个算法被赋予完全相同的一组进程,那么先到先得、最短作业优先和循环之间的周转时间是否相等?还是调度算法不同?

  • 问题内容: 可以说我正在与Web服务器进行HTTP通讯,并且我将接受html或文本,但更喜欢html。换句话说,标题应该说(我认为!) 接受:text / html,text / * 我正在使用Java,所以我有一个URLConnection。我应该使用: 要么 还是等价的??? 通常,我看到的大多数第三方代码似乎都不必担心这些标头的顺序或多个值,因此我想知道它最终如何工作。 问题答案: 第一个代

  • 问题内容: Matplotlib中我最喜欢做的事情之一是设置颜色循环以匹配某些颜色图,以生成线图,这些线图在各行中具有很好的颜色渐变。 以前,这是使用以下代码的一行: 但是,最近我看到一个警告: 使用,我可以获得相同的结果,但是我需要,并且语法不太紧凑: 因此,我的问题是: 我使用正确吗?(以最有效的方式?) 有没有更简单的方法将颜色循环设置为颜色图?换句话说,是否有一些神话般的功能? 这是完整示

  • 一般来说,我看到的大多数第三方代码似乎并不太担心这些头的排序或多个值,所以我想知道它最终是如何工作的。