synchronized你到底锁住的是谁?

自闭症网瘾萝莉.ら 提交于 2020-02-06 18:57:22

synchronized从语法的维度一共有3个用法:

1、静态方法加上关键字

2、实例方法(也就是普通方法)加上关键字

3、方法中使用同步代码块

前两种方式最为偷懒,第三种方式比前两种性能要好。

synchronized从锁的是谁的维度一共有两种情况:

锁住类

锁住对象实例

1)静态方法上的锁

静态方法是属于“类”,不属于某个实例,是所有对象实例所共享的方法。也就是说如果在静态方法上加入synchronized,那么它获取的就是这个类的锁,锁住的就是这个类。

2)实例方法(普通方法)上的锁
实例方法并不是类所独有的,每个对象实例独立拥有它,它并不被对象实例所共享。在实例方法上加入synchronized,那么它获取的就是这个类的对象的锁,锁住的就是这个对象实例。

synchronized(this){...}

this关键字所代表的意思是该对象实例,换句话说,这种用法synchronized锁住的仍然是对象实例,他和public synchronized void demo(){}可以说仅仅是做了语法上的改变。

synchronized(Demo.class){...}

这种形式等同于抢占获取类锁,锁住的是这个类。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!