问题标签 [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 回答
305 浏览

java - ExecutorService 和 AtomicInteger : RejectedExecutionException

我希望 atomicInteger 的值为 100 然后程序终止

我有错误

我应该如何实现它。

0 投票
3 回答
1489 浏览

java - 为什么不推荐基于 AtomicInteger 的 Stream 解决方案?

假设我有这份水果清单:-

我需要在每个水果前面加上一个序列号并打印出来。水果的顺序或序列号无关紧要。所以这是一个有效的输出: -

解决方案#1

解决方案#2

问题

为什么解决方案 #1 是一种不好的做法?我在很多地方都看到AtomicInteger基于解决方案不好(比如在这个答案中),特别是在并行流处理中(这就是我在上面使用并行流来尝试遇到问题的原因)。

我查看了这些问题/答案:-
在哪些情况下流操作应该是有状态的?
使用 AtomicInteger 在 Stream 中进行索引是否合法?
Java 8:计算 lambda 迭代的首选方法?

他们只是提到(除非我错过了什么)“可能会出现意想不到的结果”。像什么?在这个例子中会发生吗?如果没有,你能给我一个可能发生的例子吗?

至于“不保证应用映射器函数的顺序”,嗯,这是并行处理的本质,所以我接受它,而且,在这个特定的例子中,顺序并不重要。

AtomicInteger是线程安全的,因此在并行处理中应该不是问题。

有人可以提供示例,在哪些情况下使用这种基于状态的解决方案会出现问题?

0 投票
1 回答
147 浏览

java - Atomic 中的 Java 计算

我有一个关于 Java 的小问题AtomicInteger。我知道我可以实现线程安全的计数器。但我找不到任何关于复杂计算的信息AtomicInteger

例如,我有这个计算(i 和 j 是对象变量,“this”):

是否可以仅使用 使此方法成为线程安全的AtomicInteger

这是有效的吗?

我认为不是因为线程可以在计算时更改 j。为避免这种情况,我必须控制计算时是否更改 j。但我没有在AtomicInteger.

伪代码:

有人可以帮我澄清一下吗?

0 投票
4 回答
227 浏览

java - Threads with shared integer object not working as expected

I have a problem where i have to print the numbers in such format.

I have implemented my runnable interface as below.

My main class is as follows

when i run the program i am getting the output as follows

Instead of previously expected results. But when I Change the integer to atomic integer type i start getting the expected result. can anyone explain what is i can do to make it run with integer instead of using atomic integer

0 投票
0 回答
103 浏览

c++ - C++:在不同线程之间共享值(数据)的正确方法

我有以下 Thread.cpp:

运动线程.cpp

这不是我的确切代码,这是我将获取数据并将数据存储到变量中的部分。distance_q2, angle_q6_checkbit等不是原子变量,因此从不同的线程读取和写入它们是不一致的!在同一个线程中,如果我尝试打印数据,我会得到正确的读数。输出如下。

来自 Thread.cpp 的正确数据

现在,我试图将数据用于处理或其他我的东西。存储距离、角度质量数据等Thread::sync_quality, Thread::angle_q6_checkbit, Thread::distance

从激光数据中获取数据Thread.cppmotion.cpp线程(运动线程中的 cout 数据):

我得到了不正确的输出(只有 359 度,这也是不正确的)。我无法得出结论。现在上面的输出是:

另一个线程motion.coo的数据不正确

我试图将 then 声明为原子,但我看不到任何改进。帮助将不胜感激。

0 投票
1 回答
79 浏览

java - 当我们想要使用 map.get(key).wait() 时,当值是 AtomicLong 时同步 map.get(key) 真的有意义吗?

我要做的是实现一个特定于密钥的读写锁。如果该键上没有写入请求,则可以同时执行多个读取请求。可以同时执行对不同键的请求。我使用 ConcurrentHashMap 来保存键并记录每个键的运行写入操作。

我的代码如下所示:

这个想法是,当一个新线程想要读取时,它需要首先检查该键上是否有任何写入(如果计数不为 0),如果没有,它可以继续,如果是,它需要等待。所以我想我必须使用count.get(key).wait();. 但是,Java 强迫我synchronized (count.get(key))使用该wait()方法。

我想知道在这里使用同步是否有意义,因为我已经使用了 AtomicInteger?

ps 我确实有notify()后来的解锁方法。

0 投票
1 回答
204 浏览

c - 初始化 atomic_flag

我有一个struct,我们称之为它struct foo,我想添加一个atomic_flag变量。到目前为止,我一直在calloc考虑结构,因为它主要需要零初始化。我应该如何初始化atomic_flag成员?

编辑:

我发现Jens Gustedt的这个相关DR#421建议将零/默认初始化设置为仅适用于s。我怎样才能知道它是否被接受?atomic_flag

0 投票
1 回答
648 浏览

java - Java中原子set()和getAndSet()方法的区别

在我的一个程序中,我试图更新 Atomic Integer 的值,但无法在set()getAndSet()方法之间做出决定,因为它们似乎都做同样的事情。我已经阅读了这篇文章和这篇文章,但是他们正在比较setand compareAndSet(如果线程没有预期值,则放弃设置提供的值)而我有兴趣比较setsetAndGet在设置提供的值后返回值)。

我无法找出这两种方法之间的任何主要区别。

  1. set()我们有的时候为什么有getAndSet()。可以选择不使用返回的值getAndSet()

  2. 什么时候应该使用这些方法?

0 投票
1 回答
40 浏览

multithreading - 为什么即使使用 AtomicInteger 来跟踪进度,这段代码也不是线程安全的?

我尝试创建一个扩展线程的类,它只需要一个字符串数组并交替打印前 2 个字符串以进行 10000 次迭代。我使用 AtomicInteger(计数器)跟踪要打印的索引,但是输出有时会打印:hello hello hello w hello hello 等,而不是在每次迭代时交替。为什么会这样?如果不将“同步”放在运行方法中,我该如何解决?

0 投票
1 回答
32 浏览

java - 线程是否等到它可以编辑(例如 addAndGet)一个原子变量?

我有两个线程和一个原子整数。两者都运行 1000 次迭代的循环。一个线程递增一,其他线程递减一。结果最后是 0。
到目前为止很好。
但是 a) 一个线程是否在因为 CAS 失败而无法编辑变量时等待下一条语句,或者 b= 每个线程是否有第二个后台线程(创建隐式)来编辑变量并等待它可以编辑变量?
第二个假设(b)没有意义,因为我得到了一个返回值,但我最好问一下。