我有一個列表與對象列表<> my_objects。多個線程可以更改此列表。假設我沒有任何鎖定機制來控制對列表的訪問。併發訪問列表:如果刪除對象或列表設置爲空,會發生什麼情況?
如果我正在處理列表中的某個對象,並且另一個線程突然將該數組設置爲null,會發生什麼?
MyObject o = my_objects[i];
//now a second thread has set my_objects to null
o.myMethod();
會發生NullPointerException?
此外,如果第二個線程在第一個線程中使用它時從列表中刪除了考慮的對象,會發生什麼情況?
//second thread:
//y = i
MyObject o2 = my_objects[y];
my_objects.Remove(o2);
您很可能會得到一個'InvalidOperationException',並且顯示消息「在枚舉器被實例化後集合被修改了。」 –
它是一個數組還是一個列表?他們不是一回事。 –
看看System.Collections.Concurrent命名空間對象...你可能會直接掉線,這將是線程安全的。這並不回答一個問題,只是想我會指出。 – iMortalitySX