16 java concurrency multithreading
没有java.util.concurrent.atomic.AtomicBoolean可以自动否定/反转值的方法?我可以用另一种方式吗?我错过了什么吗?
小智 16
有点老......但并没有真正觉得答案很棒.
必须完全不同意这不常见或仅在硬件中有用.您可能需要多个线程在单个变量上切换,具有相同的可能性...我使用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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Joa*_*uer 14
我天真的实现是这样的:
boolean v;
do {
v=atomicBoolean.get();
} while(!atomicBoolean.compareAndSet(v, !v));
Run Code Online (Sandbox Code Playgroud)
您可以AtomicBoolean.negate()通过使用AtomicInteger.getAndIncrement()和将偶数视为true和奇数作为来进行模拟false。数字的实际值应该被忽略,这样你就不用关心整数溢出了。
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |