标签:
@synchronized 锁的永远是对象 ,值针对于对象,只能锁对象,常量等是不能加synchronized,一旦加编译也不会通过
@synchronized 锁对象中的非static 就是锁调用该方法的对象,是整个对象
@synchronized 锁对象中的static 方法就是锁整个类 ,和 synchronized(x.class) 和 锁静态代码块 三者都是一样的 就是锁 类加载器 给这个类 的 对象,记住这个类对象不是我们自己new 这个类的对象,而是 jvm 给这个类加载时用的对象,2这不一样。
@synchronized 锁一个对象中属性的话,这个属性必须也是对象,不能是常量,比如集合等,那synchronized(集合)就和这个对象没什么关系了,因为这个集合虽然是在这个对象里,但是 synchronized 针对的是 对象,是锁住的这个对象,即这个集合对象,所以和这个属性所在的大对象是没什么关系的,也就是说锁 大对象中的某个属性小对象时,那个大对象中的其他属性或者方法都是可以访问的,不受那个锁小对象的影响。
标签:
原文地址:http://www.cnblogs.com/wzhanke/p/4494356.html