各种锁的理解


 synchronized版本是同一个锁,lock版本是两个不同的锁

这里说错了,这就是一把锁,锁的就是ReentrantLock这个对象,ReenTrantLock中有AQS,AQS可以判断两次lock方法都是同一个线程,这才是可重入锁

synchronized和lock的区别

 

 可以注意一下,老师这块说的有点问题,是T2在自旋,T1直接出去了

死锁

 

 看懵逼的看下构造方法,他两个参数反过来了

 这里没错阿  T1的实参和T2的实参是反的,两个同时获得第一把锁之后输出语句,然后想要获取对方的锁  造成死锁

两个线程都能进去第一个snychronized方法,所以在第一个同步方法里AB两个对象就已经被分别锁住了

这里虽然new了两个Tread,但是因为锁的是string,在常量池(可以理解为整个程序共享),所以两个线程锁的是同一个string对象,也就是同一把锁。(想到这个例子真厉害!!)