我正在解决在多线程环境中迭代计算答案下限的问题。

在计算过程中,可能发生线程数量试图更新公共基本变量的情况。对我而言,这并不重要,其中哪个会成功书写其价值而哪个会失败。

我唯一关心的问题是,如果其中一个线程可能写入部分原语(例如,第一个字节),而另一个线程可能写入另一部分(例如,最后字节),结果该原语的值将是与线程试图写的内容无关。

与官方文献的链接将不胜感激。

提前致谢。

最佳答案

我唯一关心的问题是
  如果有可能其中一个线程
  会写一部分原语
  (例如第一个字节),另一个将
  写另一部分(例如最后一个字节)
  结果就是
  原语将不是
  线程试图写。


引用Java Language Specification


  如果不是double或long变量
  声明为volatile,然后
  加载,存储,读取和目的
  写动作,就好像
  他们是32位的两个变量
  每个:只要规则需要一个
  在这些动作中,有两个是
  每个32位的一半执行一次。
  一个64位的方式
  double或long变量被编码
  分为两个32位
  与实施有关。负载
  存储,读取和写入操作
  volatile变量是原子的,即使
  变量的类型为double或
  长。


写入其他原语始终是原子的。但是,如果未将其声明为volatile,则其他线程可能在任意长时间内看不到更新。

07-24 21:16