类锁,对象锁,私有锁

1. 类锁:在代码中的方法上加了static和synchronized的锁,或者synchronized(xxx.class)的代码段

2.对象锁:在代码中的方法上加了synchronized的锁,或者synchronized(this)的代码段

3.私有锁:在类内部声明一个私有属性如private Object lock,在需要加锁的代码段synchronized(lock)

 

对象锁:假设我有一个类ClassA,其中有一个方法synchronized methodA(),那么当这个方法被调用的时候你获得就是对象锁。

举例:ClassA a = new ClassA(); ClassA b = new ClassA(); 那么如果你在a这对象上调用了methodA,不会影响b这个对象,也就是说对于b这个对象,他也可以调用methodA,因为这是两对象,所以说对象锁是针对对象的

 

类锁,其实没有所谓的类锁,因为类锁实际上就是这个类的对象的对象锁

举例:我有一个类ClassA,其中有一个方法synchronized static methodA(),注意这个方法是静态的了,那就是说这个类的所有的对象都公用一个这个方法了,那如果你在这个类的某个对象上调用了这个方法,那么其他的对象如果想要用这个方法就得等着锁被释放,所以感觉就好像这个类被锁住了一样。

 

类锁和对象锁不会产生竞争,二者的加锁方法不会相互影响。

posted @ 2016-04-12 17:46  吴添龙  阅读(386)  评论(0编辑  收藏  举报