可能类似的问题:
今天我在调试我的游戏;它有一个非常困难的线程问题,每隔几分钟就会出现一次,但很难重现。所以首先我将
synchronized
关键字添加到我的每个方法中。那没有用。然后我将volatile
关键字添加到每个字段。问题似乎只是自己解决了。
经过一些实验,我发现负责的字段是一个GameState
跟踪我的游戏当前状态的对象,它可以是正在玩的,也可以是忙碌的。忙碌时,游戏会忽略用户输入。我所拥有的是一个不断更改state
变量的线程,而事件线程读取state
变量。但是,一个线程更改变量后,另一个线程需要几秒钟才能识别更改,这最终导致了问题。
它是通过使状态变量来修复的volatile
。
为什么默认情况下Java中没有变量,volatile
不使用volatile
关键字的原因是什么?