问题标签 [atomicinteger]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何使用原子整数?
我有一堂课,例如:
问题是,我想number
一次次更新,我必须让一个对象无状态,这意味着nubmer
必须是最终的。我的朋友建议我使用AtomicInteger
类,但我不知道如何使它工作。
java - AtomicInteger 或 LongAccumulator
在下面的示例中,有人可以判断LongAccumulator是否可以成为AtomicInteger的更好选择吗?
java - AtomicInteger.updateAndGet() 和 AtomicInteger.accumulateAndGet() 之间有什么功能区别吗?
有AtomicInteger.accumulateAndGet()
没有不能用 替换的场景AtomicInteger.updateAndGet()
,还是只是为了方便方法引用?
这是一个简单的示例,我看不到任何功能差异:
显然, 和 也是getAndUpdate()
如此getAndAccumulate()
。
java - 关于 java.util.concurrent AtomicInteger
我在GrepCode上遇到了 AtomicInteger 类的源代码,并找到了以下代码片段。
静态块如何知道实例变量值的偏移量。加载和链接类时进行静态初始化。那么我们如何知道类加载时实例值的偏移量。类加载后创建对象。当创建对象时,“值”实例变量是否将具有固定的偏移量。请解释 。
java - AtomicInteger 的线程行为
以下问题是针对 OCP Java SE 7 程序员 II 考试的模拟考试。解决方案说答案是 0,但我和我的同事不确定答案不在 -5 和 5 之间(这是一个选择) 有人可以为我们澄清一下吗?这是代码:
谢谢!
java - 具有可见性的递增 int 计数器
我有一个线程更新 int 而另一个线程在某个时候读取它的情况。所以单读单写。到目前为止,我volatile
为此目的使用 int ,但由于这会强制内存屏障上的完全同步,所以我正在考虑其他事情。
一种方法是AtomicInteger.incrementAndGet()
,但我认为这具有完全相同的效果,实际上会更慢
另一种方法是为编写器使用AtomicInteger.lazySet
额外的非易失性计数器。所以基本上我们会有
作为一个天真的“ lazyIncrement
”。
它实际上会比volatile
writer 简单地增加 int 更高效吗?
谢谢
java - 使用 3 个线程按顺序打印数字
我有一个程序,其中 3 个线程试图按从 1 到 10 的顺序打印数字。我正在使用 aCountDownLatch
来保持计数。
但是程序在打印 1 之后就停止了。
注意:我知道使用AtomicInteger
而不是Integer
可以工作。但我希望在当前代码中找出问题所在。
主程序:
编辑程序AtomicInteger
:
java - AtomicInteger 中的 get() 与 intValue() 方法
AtomicInteger
类有 2 个方法,get()
并intValue()
具有以下定义。
intValue()
定义 :
get()
定义:
使用非最终方法 intValue() 有什么好处吗?出于所有实际目的,如果我没有错,我们可以使用 get 方法。请解释这种做法是否有任何好处。
java - 使用执行器服务等待守护线程完成迭代
我必须并行化现有的后台任务,而不是串行消耗“x”资源,而是仅使用“y”线程(y << x)并行完成手头的工作。该任务不断在后台运行并不断处理一些资源。
代码结构如下:
我已ChildBackground
按以下方式修改:
我不会每次都创建和拆除 ExecutorService,因为垃圾收集在我的服务中有点问题。虽然,我不明白它会有多糟糕,因为我不会在每次迭代中产生超过 10 个线程。
我无法理解如何等待所有ResourceProcessor
s 完成一次迭代的处理资源,以便我可以重置一些计数并在stopProcessing
. 我考虑了以下选项:
1) executorService.awaitTermination(超时)。这不会真正起作用,因为它会一直阻塞直到超时,因为ResourceProcessor
线程永远不会真正完成它们的工作
2)我可以在之后找出资源的数量findResources
并将其提供给子类,并让每个ResourceProcessor
增加处理的资源数量。stopProcessing
在重置计数之前,我将不得不等待所有资源都被处理。我需要类似 CountDownLatch 的东西,但它应该算数UP
。这个选项会有很多状态管理,我不是特别喜欢。
3)我可以更新public abstract void processResource(final int resource)
以包括总资源计数并让子进程等到所有线程都处理完总资源。在这种情况下也会有一些状态管理,但仅限于子类。
在这两种情况下,我都必须添加 wait() 和 notify() 逻辑,但我对我的方法没有信心。这就是我所拥有的:
我不确定 usingAtomicInteger
是否是正确的方法,如果是,我是否需要调用 wait() 和 notify()。如果我不使用 wait() 和 notify(),我什至不必在同步块中执行所有内容。
如果我应该为每次迭代简单地创建和关闭 ExecutorService 或者我应该采用第四种方法,请让我知道您对这种方法的想法。
java - 是否可以通过使用 AtomicInteger 的方法来改变 int?
我有一个方法:
然后在 main 中调用:
结果仍然是 3. 是否有可能以这种方式改变 int ?