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你到底锁住的是谁?的主要内容,如果未能解决你的问题,请参考以下文章

面试必备synchronized锁住的是什么?

java synchronized究竟锁住的是什么

synchronized锁住的是代码还是对象

java并发 Java线程同步:synchronized锁住的是代码还是对象

自顶向下彻底理解 Java 中的 Synchronized

从三个层面解析synchronized原理