如果从多个线程访问Java中的变量,则必须确保它们被安全地发布.这通常意味着使用synchronized或volatile.
我的印象是,我的一些同事并没有认真对待这个问题,因为他们"以前从未听过,volatile而且他们的计划已经工作了多年".
所以我的问题是:
有人可以提供示例Java程序/片段,可靠地显示数据可见性问题.
我认为运行一个程序并看到意外的NPE或陈旧的变量值将有助于更多,而不仅仅是理论上的解释,这是无法证明的.
非常感谢你的帮助!
更新:再强调一点.我已经阅读了Java Concurreny in Practice,并且知道理论上存在可见性问题的示例.我正在寻找的是一种真正展示它们的方法.我不确定,这实际上是可行的,但也许有一个jvm配置或类似的东西允许它.
我想我知道这一点,但希望确认一下.
显然,synchronized会阻止其他线程访问它,但是我看到了很多例子,例如
public synchronized void setValue(int value)
{
balance=value;
}
Run Code Online (Sandbox Code Playgroud)
我是否正确地思考,如果该方法只执行如上所述的一行,那么它在同步中没有任何意义.
谢谢