我有一個具有受保護方法的抽象類。我在這個方法中使用字典。這個類有2個實現。這兩個類爲某些操作調用此受保護的方法。如果兩個實現都在不同的線程中運行,那麼受保護方法中的字典是否線程安全?受保護方法內的字典是否安全?
受保護的方法如下
protected Dictionary<string, string> GenerateParameterFromQueue()
{
Dictionary<string, string> parameters;
string queueInput = this._Queue.QueueInput;
string[] inputArray = Regex.Split(queueInput,Constants.KEY_DELIMITER);
parameters = inputArray.ToDictionary(s => s.Split(Convert.ToChar(Constants.KEY_EQUALITY))[0], s => s.Split(Convert.ToChar(Constants.KEY_EQUALITY))[1]);
return parameters;
}
感謝澄清約阿希姆。關於這個._Queue,它不是一個靜態變量。我設置它在其他方法如下public void ProcessQueue(Queue queue){this._Queue = queue;}我想這將創建每個線程的新_Queue對象,因此它是安全的。如果我錯了,請糾正我。 –
這很大程度上取決於系統設計中未在您的問題中顯示的部分。多個線程可以同時在同一個對象中運行嗎?如果是這樣,不一定是線程安全的,因爲線程在設計時會使用相同的_Queue引用。相同的隊列可以傳遞給多個對象嗎?同樣的事情,不一定是線程安全的,因爲多個對象的_Queue變量可能指向相同的隊列。在一個對象實例中保留一個線程,遠離靜態並確保不將共享對象傳遞給多個實例通常會保證您的安全。 –