问题标签 [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.

0 投票
2 回答
457 浏览

java - 如何使用原子整数?

我有一堂课,例如:

问题是,我想number一次次更新,我必须让一个对象无状态,这意味着nubmer必须是最终的。我的朋友建议我使用AtomicInteger类,但我不知道如何使它工作。

0 投票
2 回答
810 浏览

java - AtomicInteger 或 LongAccumulator

在下面的示例中,有人可以判断LongAccumulator是否可以成为AtomicInteger的更好选择吗?

0 投票
2 回答
6644 浏览

java - AtomicInteger.updateAndGet() 和 AtomicInteger.accumulateAndGet() 之间有什么功能区别吗?

AtomicInteger.accumulateAndGet()没有不能用 替换的场景AtomicInteger.updateAndGet(),还是只是为了方便方法引用?

这是一个简单的示例,我看不到任何功能差异:

显然, 和 也是getAndUpdate()如此getAndAccumulate()

0 投票
1 回答
518 浏览

java - 关于 java.util.concurrent AtomicInteger

我在GrepCode上遇到了 AtomicInteger 类的源代码,并找到了以下代码片段。

静态块如何知道实例变量值的偏移量。加载和链接类时进行静态初始化。那么我们如何知道类加载时实例值的偏移量。类加载后创建对象。当创建对象时,“值”实例变量是否将具有固定的偏移量。请解释 。

0 投票
1 回答
250 浏览

java - AtomicInteger 的线程行为

以下问题是针对 OCP Java SE 7 程序员 II 考试的模拟考试。解决方案说答案是 0,但我和我的同事不确定答案不在 -5 和 5 之间(这是一个选择) 有人可以为我们澄清一下吗?这是代码:

谢谢!

0 投票
1 回答
85 浏览

java - 具有可见性的递增 int 计数器

我有一个线程更新 int 而另一个线程在某个时候读取它的情况。所以单读单写。到目前为止,我volatile为此目的使用 int ,但由于这会强制内存屏障上的完全同步,所以我正在考虑其他事情。

一种方法是AtomicInteger.incrementAndGet() ,但我认为这具有完全相同的效果,实际上会更慢

另一种方法是为编写器使用AtomicInteger.lazySet额外的非易失性计数器。所以基本上我们会有

作为一个天真的“ lazyIncrement”。

它实际上会比volatilewriter 简单地增加 int 更高效吗?

谢谢

0 投票
4 回答
1397 浏览

java - 使用 3 个线程按顺序打印数字

我有一个程序,其中 3 个线程试图按从 1 到 10 的顺序打印数字。我正在使用 aCountDownLatch来保持计数。

但是程序在打印 1 之后就停止了。

注意:我知道使用AtomicInteger而不是Integer可以工作。但我希望在当前代码中找出问题所在。

主程序:

编辑程序AtomicInteger

0 投票
1 回答
221 浏览

java - AtomicInteger 中的 get() 与 intValue() 方法

AtomicInteger类有 2 个方法,get()intValue()具有以下定义。

intValue()定义 :

get()定义:

使用非最终方法 intValue() 有什么好处吗?出于所有实际目的,如果我没有错,我们可以使用 get 方法。请解释这种做法是否有任何好处。

0 投票
1 回答
475 浏览

java - 使用执行器服务等待守护线程完成迭代

我必须并行化现有的后台任务,而不是串行消耗“x”资源,而是仅使用“y”线程(y << x)并行完成手头的工作。该任务不断在后台运行并不断处理一些资源。

代码结构如下:

我已ChildBackground按以下方式修改:

我不会每次都创建和拆除 ExecutorService,因为垃圾收集在我的服务中有点问题。虽然,我不明白它会有多糟糕,因为我不会在每次迭代中产生超过 10 个线程。

我无法理解如何等待所有ResourceProcessors 完成一次迭代的处理资源,以便我可以重置一些计数并在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 或者我应该采用第四种方法,请让我知道您对这种方法的想法。

0 投票
3 回答
244 浏览

java - 是否可以通过使用 AtomicInteger 的方法来改变 int?

我有一个方法:

然后在 main 中调用:

结果仍然是 3. 是否有可能以这种方式改变 int ?