如何演示 Java 多线程可见性问题?
如果从多个线程访问 Java 中的变量,则必须确保安全地发布它们。这通常意味着使用 或 。synchronized
volatile
我得到的印象是,我的一些同事并不认真对待这个问题,因为他们“以前从未听说过,他们的程序已经工作了很多年”。volatile
所以我的问题是:
有人可以提供一个示例Java程序/代码片段,可靠地显示数据可见性问题。
我认为运行一个程序并看到意外的NPE或陈旧的变量值将比无法证明的理论解释更有帮助。
非常感谢您的帮助!
更新:只是为了再次强调这一点。我读过Java Concurreny in Practice,并知道理论上存在可见性问题的例子。我正在寻找的是一种实际展示它们的方法。我不确定,这实际上是可能的,但也许有一个jvm配置或类似的东西允许它。