问题标签 [atomic-long]
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 - AtomicLong 操作
我需要执行以下操作:
但我想用AtomicLong
这是我正在尝试的,但我不太明白它是否正确:
我如何判断这是否正确?
java - 运算符 += 未定义参数类型 int、AtomicLong
我有一张地图如下 -
该映射包含很多键值对。将AtomicLong
值作为值是必要的,所以这就是我在该地图中放置这样的原因。
所以现在如果我试图遍历ConcurrentHashMap
我上面提到的,它总是在这条线上给我错误-
作为-The operator += is undefined for the argument type(s) int, AtomicLong
我不确定如何解决此问题?我无法返回并将数据结构更改为 allInteger
而不是Long
and AtomicLong
。
所以我需要找出如何在下面的代码中进行更改,以便它开始工作。我正在考虑转换为整数。但它也没有工作。
下面是我的代码
java - AtomicLong 的 incrementAndGet 方法如何在内部工作?
我在我的多线程代码中使用incrementAndGet
方法AtomicLong
来测量我们的一些客户端代码的性能。
在上面的代码中,我试图测量多少时间-
client.getAttributes(columnsList);
正在服用。
据我所知,incrementAndGet
方法将以原子方式将当前值增加一。这意味着每个线程可能会等待其他线程增加该值。我对吗?意思是会被屏蔽?
这是否会影响我测量任何方法的性能的方式?这意味着它还会为该测量增加一些额外的时间吗?
为什么我问这个是因为我正在尝试对我们的大多数客户端代码和服务器端代码进行基准测试,如果我需要测量每种方法所花费的时间,那么我就是这样做 -
无论我想测量什么代码,我通常将下面的行放在该方法的正上方
long start = System.nanoTime();
这两行采用相同的方法但不同ConcurrentHashMap
因此,如果我正在使用incrementAndGet
方法并且如果它为我的性能测量增加了额外的时间,那么我可能没有得到准确的结果?
更新:-
这是下面的方法,我F3
在incrementAndGet
in上做的时候得到的eclipse
。
所以这里有一个同步块。这意味着每个线程都会在这里等待其他线程。这是一个阻塞呼叫。
啊。我刚刚检查了我的 JVM,IBM JVM
与SUN JVM
. 因为我在一家公司工作,我无法改变这个特殊的事情。
那么有什么方法可以避免这种基于锁的解决方案来衡量任何方法的性能/基准?请记住,我正在运行 IBM JVM。
谢谢您的帮助。
java - LongAdder[] + System.arraycopy() =?
简化的场景是我有一个 LongAdders 数组,并且多个线程正在访问这个数组,以便在给定索引处增加变量。
在没有任何额外锁定机制的情况下进行数组复制是否安全?
据我对此事的调查,应该没问题,因为 LongAdder 的所有重要字段都是易变的,并且由于描述 increment() 应该是原子的(也就是说,我希望它不会保留任何可能的部分状态未来运营中的问题)。
谁能证实这一点?
PS 我知道我可能无法获得最新的快照(复制期间的增量),但这没关系。
java - 如果您只是设置和获取值,使用 AtomicLong 有什么好处吗?
我需要一个长实例变量。
该变量将保存一些事件时间(以毫秒为单位的时间)。
如果我只是将值设置为这么长并获取值,
那么使用 AtomicLong (并且只有它的 get() 和 set())而不是 long 有什么好处吗?
java - Java 中的 AtomicLong 是用来做什么的?
有人可以解释 AtomicLong 的用途吗?例如,以下语句有什么区别?
apache-spark - Spark Streaming:一直以来的平均值
我编写了一个 Spark Streaming 应用程序,它接收温度值并计算所有时间的平均温度。为此,我使用JavaPairDStream.updateStateByKey
事务来计算每个设备(由 Pair 的密钥分隔)。对于状态跟踪,我使用该类,它将所有温度值保存为双精度值,并通过调用该方法StatCounter
重新计算每个流的平均值。StatCounter.mean
这是我的程序:
编辑了我的全部代码:现在使用 StatCounter
这似乎工作正常。但现在问题是:
我刚刚在网上找到了一个示例,该示例还显示了如何在这里计算所有时间的平均值:https ://databricks.gitbooks.io/databricks-spark-reference-applications/content/logs_analyzer/chapter1/total.html
他们使用AtmoicLongs
etc. 来存储“有状态值”并在forEachRDD
方法中更新它们。
我现在的问题是:对于 Spark Streaming 中所有时间的有状态计算,更好的解决方案是什么?使用一种或另一种方式有什么优点/缺点吗?谢谢!
multithreading - LongAdder Striped64 wasUncontended 实现细节
这不是关于 LongAdder 如何工作的问题,而是关于我无法弄清楚的有趣的实现细节。
这是来自 Striped64 的代码(我已经剪掉了一些部分并将相关部分留给问题):
代码中的很多东西对我来说都很清楚,除了:
以下 CAS 将失败的确定性在哪里?至少这对我来说真的很令人困惑,因为这种检查只对一种情况有意义:当某个线程第 n 次(n > 1)进入longAccumulate方法并且忙自旋处于它的第一个周期时。
就像这段代码在说:如果您(某个线程)以前曾来过这里并且您对特定的 Cell 插槽有一些争用,请不要尝试将您的值 CAS 到已经存在的值,而是重新散列探测。
老实说,我希望我会对某人有意义。
java - AtomicLong 中的 getAndAdd 方法是否会导致线程等待?
我有一个运行多线程的程序,所有线程共享和处理单个 AtomicLong 变量。他们每个人都会getAndAdd()
首先调用方法来检索值并进一步处理。
如果所有线程同时运行,调用上述方法是否会导致一个线程等待另一个线程完成获取值?
java-8 - CAS 与同步性能
我已经有这个问题很长一段时间了,试图阅读大量资源并了解正在发生的事情 - 但我仍然无法很好地理解为什么事情会这样。
简而言之,我正在尝试测试 a在竞争环境中的CAS
表现与非环境中的表现。synchronized
我已经提出了这个JMH
测试:
结果:
在非共享情况下CAS
,速度要快得多,这是我所期望的。但在共同的情况下,事情是相反的——这是我无法理解的。我不认为这与偏向锁定有关,因为这会在线程持有锁定 5 秒(AFAIK)之后发生,而这不会发生,测试就是证明。
老实说,我希望只是我的测试有问题,并且有jmh
专业知识的人会出现并指出我这里的错误设置。