遇到synchronized时,一定要想想这个锁在保护什么,保护的什么对象。
Synchronized修饰方法时,是对当前对象进行加锁,类的两个不同实例就没有这种约束了。
下面看一个例子,类Exam有两个方法isSyncA()与isSyncB();类Exam的两个实例a,b
则:a.isSyncA()与a.isSyncB()是互斥的见图(a2),然而a.isSyncA与b.isSyncB()不是互斥的见图(a1)。a.cSyncA()与b.cSyncB()是互斥的见图(a3),然而:a.isSyncA()与a.cSyncA()不是互斥的见图(a4);这说明类的锁与对象的锁是不同的。
图(a1)