synchronized你到底锁住的是谁?
Posted gaopengpy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了synchronized你到底锁住的是谁?相关的知识,希望对你有一定的参考价值。
synchronized从语法的维度一共有3个用法:
1、静态方法加上关键字
2、实例方法(也就是普通方法)加上关键字
3、方法中使用同步代码块
前两种方式最为偷懒,第三种方式比前两种性能要好。
synchronized从锁的是谁的维度一共有两种情况:
锁住类
锁住对象实例
1)静态方法上的锁
静态方法是属于“类”,不属于某个实例,是所有对象实例所共享的方法。也就是说如果在静态方法上加入synchronized,那么它获取的就是这个类的锁,锁住的就是这个类。
2)实例方法(普通方法)上的锁
实例方法并不是类所独有的,每个对象实例独立拥有它,它并不被对象实例所共享。在实例方法上加入synchronized,那么它获取的就是这个类的对象的锁,锁住的就是这个对象实例。
synchronized(this){...}
this关键字所代表的意思是该对象实例,换句话说,这种用法synchronized锁住的仍然是对象实例,他和public synchronized void demo(){}可以说仅仅是做了语法上的改变。
synchronized(Demo.class){...}
这种形式等同于抢占获取类锁,锁住的是这个类。
以上是关于synchronized你到底锁住的是谁?的主要内容,如果未能解决你的问题,请参考以下文章