lock (thisLock)
{
    
// Critical code section
}

thisLock 应该是引用类型,但(object)1 将不会真正起到作用。因为进入lock 代码块时会在 thisLock中加入一个标示符。只要在这个thisLock中有一个标示符其
他线程就会一直等待,直到加锁线程取消标示符。(object)1 虽然是一个对象,但是当另一线程执行到lock((object)1)时会重新装箱生成一个匿名对象。

(object)1 类似于:
public void a()

 
object thisLock = new Object();
 
lock(thisLock)
 {

 }
}

而不是:

class ClassA
{
 
object thisLock = new Object();
public void a()
{
 
lock(thisLock)
 {
 }
}
}

并且:

通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。常见的结构 lock (this)lock (typeof (MyType))lock ("myLock") 违反此准则:

  • 如果实例可以被公共访问,将出现 lock (this) 问题。

  • 如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。

  • 由于进程中使用同一字符串的任何其他代码将共享同一个锁,所以出现 lock(“myLock”) 问题。

以上引用自MSDN。
上面列的三条,我认为严重程度是越来越深的。
1. lock (this) 可能会有问题,因为不受控制的代码也可能会锁定该对象。这可能导致死锁,即两个或更多个线程等待释放同一对象。
2.线程同步就像是上厕所,你在上厕所前都贴一块牌"有人在上厕所,请等待".(有lock的地方就是厕所,你的牌也总是贴到厕所上,不只是你自家的那就必然是公共的)lock (typeof (MyType))刚好就贴在公共厕所(应该是别人家的厕所)上了,那不是害人吗(另一个厕所也是lock (typeof (MyType)),如果你能保证 别的地方永远不用lock (typeof (MyType))那道无所谓了).
3.在整个应用程序中"myLock"都会引用到同一个示例。为了避免别人也和你使用同样的对象实例最好用一个私有对象。