我有一个具有受保护方法的抽象类。我在这个方法中使用字典。这个类有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变量可能指向相同的队列。在一个对象实例中保留一个线程,远离静态并确保不将共享对象传递给多个实例通常会保证您的安全。 –