Skip to content

Commit 19b31d4

Browse files
author
2293736867
committed
multi-thread/2020最新Java并发进阶常见面试题总结 排版修正
1 parent 0607a18 commit 19b31d4

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
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
169169
public 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
200200
public 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

Comments
 (0)