今天早上我刚刚对锁定多线程进行了一些随机测试,奇怪的是我发现在两个单独的实例中锁定一个私有“字符串”实际上会阻止另一个线程执行。请在下面找到代码以供参考。
让我感到困惑的是,两个对象中的“字符串”实际上是两个独立的对象,那么为什么锁定一个会阻塞另一个呢?(注意,如果将字符串替换为其他引用类型的对象,如 List,它不会阻止其他线程执行,这确实是我们所期望的......)
class Program {
static void Main(string[] args) {
Thread th = new Thread(DoWork);
th.Start();
Thread th2 = new Thread(DoWork);
th2.Start();
}
static void DoWork() {
Test importer = new Test();
importer.SyncTest();
}
}
public class Test {
public void SyncTest() {
string find = "test";
lock(find) {
Console.WriteLine("thread starting...");
Thread.Sleep(4000);
}
}
}