java - 如何根据条件更新原子?

标签 java concurrentmodification atomicinteger

如果当前值小于给定值,如何更新 AtomicInteger?想法是:

AtomicInteger ai = new AtomicInteger(0);
...
ai.update(threadInt); // this call happens concurrently
...
// inside AtomicInteger atomic operation
synchronized {
    if (ai.currentvalue < threadInt)
        ai.currentvalue = threadInt;
}

最佳答案

如果您使用的是 Java 8,则可以使用 AtomicInteger 中的一种新更新方法,您可以传递一个 lambda 表达式。例如:

AtomicInteger ai = new AtomicInteger(0);

int threadInt = ...

// Update ai atomically, but only if the current value is less than threadInt
ai.updateAndGet(value -> value < threadInt ? threadInt : value);

关于java - 如何根据条件更新原子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626524/

相关文章:

java - 线程是否会等到可以编辑(例如 addAndGet)原子变量为止?

java - AtomicInteger 比同步慢

java - 查找多维数组是否在数组Java中

java - 列表类型之间的转换,java

java - 为什么这个 java 程序的结果是 '44' ?

java - 删除列表中的所有非唯一成员

java - 知道为什么我在从 HashMap 中删除键时没有收到 java.util.ConcurrentModificationException 吗?

java - 在减去值时无法控制 AtomicInteger 的原子行为

Java 8 DateTimeFormatter 解析在未来很远的 ISO 日期失败

Java 优先级队列中的并发修改异常