根据本人的理解和实验效果,我认为Java synchronized的主要用法分三种:
锁静态函数或类.class(即所谓的类锁)
锁对象/锁函数(简称对象锁)
锁对象的非静态成员变量(变量锁)
结论:
1.锁对象与锁对象的非静态成员变量并不会形成同步,两者并没有包含关系。即使this里包含content成员,但对于synchronized()来讲,是两个不同的输入对象或者说参数,二者不会同步。
2.如果要对类对象里多个成员变量分别进行同步的,需保持同步参数的一致,即this与this配对(或者this与函数配对),变量与变量各自配对,但不能this与成员变量配对。
3.锁对象中嵌套调用锁对象的非静态成员变量,也没有达到与单独调用锁对象的非静态成员变量形成同步的效果(原因待研究)。
4.嵌套用锁,要注意避免死锁;尽量不要嵌套。