You need to enable JavaScript to run this app. Java中如何让Boolean引用在值变化时同步获取最新状态?
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何让Boolean引用在值变化时同步获取最新状态?

解决方案
  • 根因:Java 中的Boolean是不可变类,true/false都是固定的单例实例,你给状态字段重新赋值时,实际是让字段指向了新的Boolean实例,之前传递出去的引用仍然指向旧实例,自然无法感知更新。

方案1:自定义可变Boolean包装类(最优,完全无方法调用开销)

直接实现极简可变包装类,将布尔值用public字段直接暴露,不需要任何get/set方法,零调用损耗,完全适配毫秒级高频执行场景:

public class MutableBool {
    // 单线程场景直接用public即可
    public boolean value;
    // 多线程场景下要给value加volatile修饰,保证跨线程可见性:
    // public volatile boolean value;

    public MutableBool(boolean initialValue) {
        this.value = initialValue;
    }
}

改造后的业务代码示例:

public class State {
    protected MutableBool state = new MutableBool(true);
}
public class Main {
    public static void main(String[] args) {
        State state = new State();
        // 传递的是MutableBool对象的引用,所有持有者共用同一个实例
        MutableBool ref1 = state.state;
        
        state.state.value = false;
        System.out.println("state.state.value = " + state.state.value);
        System.out.println("ref1.value = " + ref1.value);

        ref1.value = true;
        System.out.println("state.state.value = " + state.state.value);
        System.out.println("ref1.value = " + ref1.value);
    }
}

运行结果:

state.state.value = false
ref1.value = false
state.state.value = true
ref1.value = true

该方案访问value字段是直接内存寻址,性能和访问普通boolean变量几乎一致,无任何额外损耗。

方案2:JDK内置类(仅适合非极致性能场景)

如果不想自定义类,可以使用JDK自带的java.util.concurrent.atomic.AtomicBoolean,但它内部的value字段是私有属性,必须通过get()/set()方法访问,会产生方法调用开销,不符合你的高频低损耗要求。

内容的提问来源于stack exchange,提问作者MicD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 00:33:03