当前位置:编程学习 > JAVA >>

如果一个对象有多个方法加了synchronized,那么该对象有几把锁

答案:你的说法有问题,一个对象不可能有多个方法,而是对象所在的类有多个方法, 方法前加synchronized就相当于对当前对象加锁,因此只有一把锁。
其他:对象锁是在一个类的对象上加的的锁,只有一把,不管有几个方法进行了同步。
这些同步方法都共有一把锁,只要一个线程获得了这个对象锁,其他的线程就不能访问该对象的任何一个同步方法。 有时候你会看到有所谓的类锁和对象锁的说法。假设我有一个类ClassA,其中有一个方法synchronized methodA(),那么当这个方法被调用的时候你获得就是对象锁,但是要注意,如果这个类有两个实例,比如: ClassA a = new ClassA(); ClassA b = new ClassA(); 那么如果你在a这对象上调用了methodA,不会影响b这个对象,也就是说对于b这个对象,他也可以调用methodA,因为这是两对象,所以说对象锁是针对对象的。而类锁,其实没有所谓的类锁,因为类锁实际上就是这个类的对象的对象锁,还是举例,我有一个类ClassA,其中有一个方法synchronized static methodA(),注意这个方法是静态的了,那就是说这个类的所有的对象都公用一个这个方法了,那如果你在这个类的某个对象上调用了这个方法,那么其他的对象如果想要用这个方法就得等着锁被释放,所以感觉就好像这个类被锁住了一样。 你的问题,被锁的对象的其他方法能不能被访问,如果你在某个对象上调用了他的同步方法,其他的方法还是可以进入的。 对象被锁后,其他的方法不会有什么动作,方法不会对同步方法呗调用做什么反应的。张星野107702B6! 

上一个:开发hibernate的7个步骤是什么?
下一个:寻找一个java,jsp,oracle,技术流全能的师傅

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,