首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AtomicBoolean没有negate()方法吗?

AtomicBoolean没有negate()方法吗?
EN

Stack Overflow用户
提问于 2009-08-10 15:37:12
回答 6查看 3.7K关注 0票数 22

java.util.concurrent.atomic.AtomicBoolean不是有一个方法可以自动否定/反转值吗?我可以用另一种方式做吗?我是不是遗漏了什么?

EN

回答 6

Stack Overflow用户

发布于 2012-09-28 04:40:57

有点老了..。但我觉得答案并不是很好。

必须完全不同意这是不常见的或仅在硬件中有用的说法。您可能希望多个线程以相等的可能性切换到单个变量...我用AtomicLong做了一个假的布尔值。这是从JMS MessageListener中采用的,我需要一半的时间响应特定的消息,另一半时间响应另一种类型的消息。

代码语言:javascript
复制
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;
        }
    }
}
票数 20
EN

Stack Overflow用户

发布于 2009-08-10 15:40:54

我的简单实现是这样的:

代码语言:javascript
复制
boolean v;
do {
  v=atomicBoolean.get();
} while(!atomicBoolean.compareAndSet(v, !v));
票数 15
EN

Stack Overflow用户

发布于 2018-04-16 20:09:19

您可以通过使用AtomicInteger.getAndIncrement()并将偶数视为true、奇数视为false来模拟AtomicBoolean.negate()。应该忽略该数字的实际值,这样您就不会关心整数溢出。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1255617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档