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
相关产品推荐
相关产品推荐

