内存不一致或线程干扰或两者兼而有之?

时间:2017-05-17 12:59:35

标签: java multithreading

我在阅读有关线程时从Internet获取此代码。它说这是内存一致性错误的一个例子。是产生意外输出的内存不一致还是线程干扰?为什么它会产生更多正面价值?它很少输出负值。

view= Inflater.inflate(R.layout.reg_book,container,false);

1 个答案:

答案 0 :(得分:0)

JLS第17章:

  

线程中的每个动作都发生在该线程中的每个动作之前,该动作在程序的顺序中稍后出现。

还有其他情况发生在之前但不适用于您发布的代码(代码中没有synchronizestartjoin线程或volatile 。这里的重点是发生在报价之前适用于一个线程。所以,不是你的情况,你有两个线程。

Ergo那是不是发生在前保证(这表示内存不一致),仅仅是线程干扰

线程干扰是由于每个 - 或++操作实际上意味着三个操作:读取,输入或减少和存储。这是两个线程的操作重叠的地方。

  

为什么它会产生更多正面价值?它很少输出负值。

因为行顺序可以更容易覆盖使用递减发生的存储而不是具有递增的存储。线程干扰使您可以读取陈旧数据。

  1. count是:读取,增加,存储(count++
  2. count是:读取,减少,存储(count--
  3. 每个STORE都使用READ的值。因此,读取0的t1增加并存储1.与t2相同。然而,t2增加有很大的机会在减少后覆盖t1商店。反过来说不是这样。