1212 - [ 1.3. 构造方法可以使用 synchronized 关键字修饰么?] ( #13-构造方法可以使用-synchronized-关键字修饰么 )
1313 - [ 1.3. 讲一下 synchronized 关键字的底层原理] ( #13-讲一下-synchronized-关键字的底层原理 )
1414 - [ 1.3.1. synchronized 同步语句块的情况] ( #131-synchronized-同步语句块的情况 )
15- - [ 1.3.2. ` synchronized ` 修饰方法的的情况] ( #132-synchronized-修饰方法的的情况 )
15+ - [ 1.3.2. synchronized 修饰方法的的情况] ( #132-synchronized-修饰方法的的情况 )
1616 - [ 1.3.3.总结] ( #133总结 )
1717 - [ 1.4. 说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗] ( #14-说说-jdk16-之后的-synchronized-关键字底层做了哪些优化可以详细介绍一下这些优化吗 )
1818 - [ 1.5. 谈谈 synchronized 和 ReentrantLock 的区别] ( #15-谈谈-synchronized-和-reentrantlock-的区别 )
@@ -167,11 +167,11 @@ public class Singleton {
167167
168168``` java
169169public class SynchronizedDemo {
170- public void method () {
171- synchronized (this ) {
172- System . out. println(" synchronized 代码块" );
173- }
174- }
170+ public void method () {
171+ synchronized (this ) {
172+ System . out. println(" synchronized 代码块" );
173+ }
174+ }
175175}
176176
177177```
@@ -194,13 +194,13 @@ public class SynchronizedDemo {
194194
195195在执行 ` monitorexit ` 指令后,将锁计数器设为 0,表明锁被释放。如果获取对象锁失败,那当前线程就要阻塞等待,直到锁被另外一个线程释放为止。
196196
197- #### 1.3.2. ` synchronized ` 修饰方法的的情况
197+ #### 1.3.2. synchronized 修饰方法的的情况
198198
199199``` java
200200public class SynchronizedDemo2 {
201- public synchronized void method () {
202- System . out. println(" synchronized 方法" );
203- }
201+ public synchronized void method () {
202+ System . out. println(" synchronized 方法" );
203+ }
204204}
205205
206206```
@@ -277,7 +277,7 @@ JDK1.6 对锁的实现引入了大量的优化,如偏向锁、轻量级锁、
277277
278278![ JMM(Java内存模型)] ( https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-8/0ac7e663-7db8-4b95-8d8e-7d2b179f67e8.png )
279279
280- 要解决这个问题,就需要把变量声明为** ` volatile ` ** ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。
280+ 要解决这个问题,就需要把变量声明为 ** ` volatile ` ** ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。
281281
282282所以,** ` volatile ` 关键字 除了防止 JVM 的指令重排 ,还有一个重要的作用就是保证变量的可见性。**
283283
@@ -293,7 +293,7 @@ JDK1.6 对锁的实现引入了大量的优化,如偏向锁、轻量级锁、
293293
294294` synchronized ` 关键字和 ` volatile ` 关键字是两个互补的存在,而不是对立的存在!
295295
296- - ** ` volatile ` 关键字** 是线程同步的** 轻量级实现** ,所以** ` volatile ` 性能肯定比` synchronized ` 关键字要好** 。但是** ` volatile ` 关键字只能用于变量而 ` synchronized ` 关键字可以修饰方法以及代码块** 。
296+ - ** ` volatile ` 关键字** 是线程同步的** 轻量级实现** ,所以 ** ` volatile ` 性能肯定比` synchronized ` 关键字要好** 。但是 ** ` volatile ` 关键字只能用于变量而 ` synchronized ` 关键字可以修饰方法以及代码块 ** 。
297297- ** ` volatile ` 关键字能保证数据的可见性,但不能保证数据的原子性。` synchronized ` 关键字两者都能保证。**
298298- ** ` volatile ` 关键字主要用于解决变量在多个线程之间的可见性,而 ` synchronized ` 关键字解决的是多个线程之间访问资源的同步性。**
299299
0 commit comments