Example ex=new Example ();
Thread []threads=new Thread[5];
for (int i=0;i<5;i++)
{
threads[i]=new Thread (new ThreadStart(ex.OutPut));
threads[i].Name =string.Format ("Worker thread#{0}",i) ;
}
foreach(Thread t in threads){
t.Start();
}
Console.WriteLine("主线程最后一句代码!"+DateTime.Now.ToString());
}
}
class Example{
private static object thisLock=new object ();
public void OutPut()
{
lock(thisLock){
Console .WriteLine("->{0}",Thread.CurrentThread.Name);
Thread.Sleep(1000);
Console.WriteLine(DateTime.Now);
}
}
}
}
实验结果如下:
图1:加lock
图2:没有lock
从实验结果可以看出,加lock后,程序每次只能执行一个线程,只有当前线程执行完了,才会执行下一个线程未加lock,程序执行混乱,容易阻塞。
2. Monitor
lock是对Monitor的Enter和Exit的一个封装,因此Monitor类的Enter()和Exit()方法的组合使用可以用lock关键字替代。












