因为lock public对象可能导致死锁...例如你在你的程序中lock了一个public对象,不幸的是另一个进程(即所谓不受控制的代码)也通过dll调用之类的方法lock了这个对象...结果就是你的线程在等待它释放此对象而它也在等待你释放此对象...更不幸的是如果这两个进程没有进程间同步机制(通常不会有),那么你的程序和这另一个程序都将无限等待下去...至于lock字符串,比lock public对象更加危险...因为在.NET中有个很重要的概念叫做字符串驻留...意思是整个程序中任何给定字符串都只有一个实例,就是这同一个对象表示了所有运行的应用程序域的所有线程中的该文本...所以一旦你lock了一个字符串,就意味着lock了应用程序中该字符串的所有实例...