问题标签 [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 - 无法正确使用锁
我以为我对锁和基本的多线程概念有相当不错的理解,但我在这里搞砸了一些东西。
程序应该做的就是从用户那里接收文本文件的文件名和要使用的线程数,然后在将该数字返回给用户之前计算该文件中“http”链接的数量。
然而,就我的一生而言,我无法正确计算线程数。我尝试将“count”变量设为原子整数并使用“incrementAndGet()”函数,尝试将锁放在我认为应该在的代码中,并尝试指定必要的函数是同步的,一切都无济于事。
我一直在阅读有关锁、并发和诸如此类的内容,但显然我做错了什么。有人可以向我解释我需要在哪里/为什么在我的代码中放置锁(或者如何正确使用原子整数,如果这样更有效的话)?
我最初在使用“count”变量时有一个锁定(在任何循环之外,所以它实际上做了一些事情),但是当我运行程序时我收到了各种数字。
我的代码如下所示:
如果这里的工作比我需要在适当的地方使用锁更大的问题,请告诉我,我至少会有一些工作要做,但据我所知,这应该只是表演的问题正确锁定,我要么不了解它们如何正常工作,要么只是将它们放在所有错误的地方。
java - 并发线程安全的 AtomicInteger
我已经阅读了 java.util.concurrent 包的 API 文档,但显然误解了一些东西。概述说
一个小的类工具包,支持对单个变量进行无锁线程安全 编程。
但是,一个小型测试应用程序表明 AtomicInteger 类不提供线程安全性,至少在跨线程共享时(我接受 getAndSet / increment 方法本身至少是原子的)
测试:
当我运行这个课程时,我总是得到大约 950 到 1000 的结果,而我希望总是看到正好 1000。
你能解释一下为什么当两个线程访问这个共享的 AtomicInteger 变量时我没有得到一致的结果吗?我是否误解了线程安全保证?
java - 如何根据条件更新 Atomic?
AtomicInteger
如果当前值小于给定值,如何更新?这个想法是:
java - 核心Java,多线程环境中的共享计数器
我遇到了 java 计数器问题:两个线程共享一个公共计数器并依次递增。现在有人可以使用同步显示它的代码示例,Locks 和 AtomicIntegers 意味着使用不同的方法。对于这个问题,我没有得到任何好的工作代码比较。谢谢。
java - AtomicInteger 中的那些“设置”方法
我知道compareAndSet()
in是一个核心方法,它采用一种巧妙的方法来原子地更新封装AtomicInteger
的整数原语的当前值。AtomicInteger
它只有在确定另一个线程尚未更新它之后才会这样做,如果它检测到其他情况则放弃。
另外,我知道,AtomicInteger
Java API 文档中标记为“原子”的方法在内部调用compareAndSet()
.
在表达了 in 的必要性之后compareAndSet()
,AtomicInteger
我的问题是:
- 为什么
weakCompareAndSet()
存在于AtomicInteger
?为什么我会选择在compareAndSet()
可用时使用它?根据 Java API,它可能会虚假失败并且不提供订购保证,因此很少是 . 的合适替代方案
compareAndSet
。
- 为什么
- 令人惊讶的是, 中有一个 raw
set()
方法AtomicInteger
,它甚至没有标记为 atomic!它在课堂上做什么AtomicInteger
?!
- 令人惊讶的是, 中有一个 raw
java - AtomicInteger 比同步慢
我通过比较同步方法测试了多线程中的原子整数有多快,但我得到的结果是原子整数比同步方法慢。
我阅读了 Java API Reference 并且我了解 Atomic Integer 比多线程中的同步更快。
所以我想知道为什么我用 Atomic Integer 得到了不好的结果。我的测试代码错了?
这是我的代码
我得到了下面的结果。
java - JVM 是否允许围绕 AtomicInteger 调用重新排序指令
假设之前的代码(AtomicInteger a).addAndGet(-1)
将始终在此调用之前执行是否安全,即 JVM不会重新排序调用周围的指令addAndGet
?
如果是,是否可以安全地假设检查同一AtomicInteger
实例(例如if (a.compareAndSet(0, -1))
)状态的其他线程将看到第一个线程在addAndGet
调用之前已更改的所有内容?
java - 为 Java AtomicInteger 指定二进制数字长度
Java AtomicInteger 使用常规 4 字节长度的int
.
如果我们运行以下代码
我们将得到
有没有办法设置原子整数的大小,使其长 20 位而不是 32 位并保持原子性?
例如,新结果将是
这是 -2^19
和2^19-1
java - AtomicInteger.compareAndSet 返回原始值,而不是布尔值
Java 的AtomicInteger
优惠public final boolean compareAndSet(int expect, int update)
。如果false
返回,我想知道比较失败时的实际值是多少。这在Java中可能吗?
在 .Net 中,有public static int CompareExchange(ref int location1, int value, int comparand)
,它总是返回原始值。
java - 一些 AtomicInteger 方法的实际示例
您能否帮我掌握 AtomicInteger 类的一些方法的要点:updateAndGet
, accumulateAndGet
.
为什么第一个IntUnaryOperator
作为参数接收?什么逻辑可以潜在地应用在这个接口的功能方法中?int
我的想法是,获得简单的价值会更容易。(与IntBinaryOperator
界面相同)。
提前致谢。