在多个线程访问同一个变量的时候,最好使用lock关键字进行锁定。例如
private static object synRoot = new Object();
private static ArrayList arrayList = new ArrayList();
public static void AddItem(object value)
{
if(!arrayList.Contains(value))
{
lock(synRoot)
{
if(!arrayList.Contains(value))
{
arrayList.Add(value);
}
}
}
}
在这里使用了一种叫做双验证的方法来保证多个线程对静态变量访问时的数据同步。还有就是被锁定的对象最好是除了当前的这个类以外不能被其他对象使用,否则就会由于同一个对象被多处锁定而造成循环等待的问题。