前言
前面我们已经学习了并发编程的很多章节,如果你还没用看过,墙裂建议看一下哦,目录已经准备好了:
并发编程系列
上篇在synchronized精讲中,我们讲解了synchronized的用法、注意项等知识点,但知道用法只是基础,如果想要拿到更高的工资、更好的岗位,了解它的实现原理也是很重要的加分项,本章学习的意义非常重要。
本节主要讲解以下几个内容:
- synchronized有哪些特性?
- synchronized的实现原理?
- synchronized的作用?
- synchronized的缺陷?
正文
synchronized有哪些性质?
可重入性
定义:可重入是指同一个线程当外层函数获取到锁时,内层函数可以直接再次获取该锁。
看不懂没关系,我们先来看一个例子。
前一篇文章我们说过一妻多夫的生活案例(没有看过的小伙伴建议先看前一篇
),小伙伴们想一下,假设兄弟四人中老大先拿到这块砖(锁),那么他当天就有资格进入房间(同步方法/代码块),这没毛病,毕竟早起的鸟儿有虫吃。在老大持有这块砖的过程中,他可以在房间随意走动,他甚至可以去厕所、浴室,卧室等等,并且都不需要再重新去获取那块砖(锁)。
这就叫可重入
,一旦线程获取到对象锁(砖),再去访问该对象锁的所有同步方法(浴室、卧室)时,就不用再去重新竞争锁资源。
可能还有聪明的小伙伴觉得不够清晰,这里花Gie用 代码进行演示
//方法一
public synchronized void testSync1(){
System.out.println("我进来了方法1");
testSync1();
}
public static void main(String[