我有一个不可变的对象,它封装在类中并且是全局状态。发布后不可变对象的可见性
可以说我有2个线程得到这个状态,用它执行myMethod(state)。并且让我们先说thread1完成。它修改全局状态调用GlobalStateCache.updateState(state,newArgs);
GlobalStateCache {
MyImmutableState state = MyImmutableState.newInstance(null, null);
public void updateState(State currentState, Args newArgs){
state = MyImmutableState.newInstance(currentState, newArgs);
}
}
所以线程1将更新缓存的状态,然后线程2做同样的,它会覆盖状态(记不采取从线程1中更新的状态)
我搜索谷歌,Java规范和阅读在实践中的java并发性,但这显然没有指定。 我的主要问题是不可变的状态对象值对于已经读取不可变状态的线程是可见的。我认为它不会看到更改的状态,只有在更新后才能看到它。
所以我不明白何时使用不可变对象?这是否取决于如果我在使用最新状态时看到并且不需要更新状态的过程中同时进行修改时是否可以正常工作?
这是Java,我假设? – skaffman
'MyImmutableState state'必须是易失性的。 – bestsss