相关疑难解决方法(0)

如何演示java多线程可见性问题?

如果从多个线程访问Java中的变量,则必须确保它们被安全地发布.这通常意味着使用synchronized或volatile.

我的印象是,我的一些同事并没有认真对待这个问题,因为他们"以前从未听过,volatile而且他们的计划已经工作了多年".

所以我的问题是:

有人可以提供示例Java程序/片段,可靠地显示数据可见性问题.

我认为运行一个程序并看到意外的NPE或陈旧的变量值将有助于更多,而不仅仅是理论上的解释,这是无法证明的.

非常感谢你的帮助!

更新:再强调一点.我已经阅读了Java Concurreny in Practice,并且知道理论上存在可见性问题的示例.我正在寻找的是一种真正展示它们的方法.我不确定,这实际上是可行的,但也许有一个jvm配置或类似的东西允许它.

java multithreading visibility

30
推荐指数
3
解决办法
5383
查看次数

原子操作和多线程

最近我正在阅读一个教程,因为我发现了一个声明说...

"Java语言规范保证读取或写入变量是一个原子操作(除非变量是类型long或者double).类型的操作变量long或double只有在用volatile关键字声明时才是原子的."

AtomicInteger或AtomicLong提供类似的方法getAndDecrement(),getAndIncrement()以及getAndSet()哪些是原子方法.

我对上述陈述感到困惑.你能澄清何时使用 AtomicInteger或AtomicLong上课.

java variables multithreading synchronization atomicity

28
推荐指数
2
解决办法
3万
查看次数