我有一個靜態數組變量正在由兩個線程共享。一個線程可以改變引用到另一個線程迭代通過它
我想知道,如果我指定數組變量另一個數組對象Thread1
而Thread2
迭代是在陣列上會發生什麼。
即
在線程1
MyStaticClass.MyArray = SomeOtherArray
在線程2:
for (int i = 0; i < MyStaticClass.MyArray.length; i++)
{
//do something with the i'th element
}
結果不容易預測。它可能會繼續迭代正常(儘管顯然交換在循環中使用的變量可能是*不好*)。如果您嘗試使用現在大於數組長度的索引,它可能會崩潰。這種類型的代碼將是非常糟糕的形式,並且是鎖被髮明的原因。一般來說,多線程的最佳經驗法則是避免在線程之間共享數據,並始終鎖定您分享的內容。 –