AtomicBoolean 没有 negate() 方法吗?
2022-09-02 00:47:14
没有可以原子否定/反转值的方法?我可以用另一种方式做吗?我错过了什么吗?java.util.concurrent.atomic.AtomicBoolean
没有可以原子否定/反转值的方法?我可以用另一种方式做吗?我错过了什么吗?java.util.concurrent.atomic.AtomicBoolean
有点老...但真的不觉得答案很棒。
必须完全不同意这在硬件中不常见或仅在硬件中有用。您可能希望多个线程以相等的可能性在单个变量上切换...我用AtomicLong做了一个假的布尔值。这是从JMS MessageListener中采用的,我需要在一半的时间内响应特定的消息,在另一半的时间内响应另一种类型的消息。
public class Mock {
private static AtomicLong count = new AtomicLong(0);
public boolean respond() {
long currentCount = count.getAndIncrement();
if (currentCount % 2 == 0) {
return true;
} else {
return false;
}
}
}
我幼稚的实现是这样的:
boolean v;
do {
v=atomicBoolean.get();
} while(!atomicBoolean.compareAndSet(v, !v));