mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
multi-thread/2020最新Java并发进阶常见面试题总结 排版修正
This commit is contained in:
parent
0607a18a1f
commit
19b31d4e59
@ -12,7 +12,7 @@
|
||||
- [1.3. 构造方法可以使用 synchronized 关键字修饰么?](#13-构造方法可以使用-synchronized-关键字修饰么)
|
||||
- [1.3. 讲一下 synchronized 关键字的底层原理](#13-讲一下-synchronized-关键字的底层原理)
|
||||
- [1.3.1. synchronized 同步语句块的情况](#131-synchronized-同步语句块的情况)
|
||||
- [1.3.2. `synchronized` 修饰方法的的情况](#132-synchronized-修饰方法的的情况)
|
||||
- [1.3.2. synchronized 修饰方法的的情况](#132-synchronized-修饰方法的的情况)
|
||||
- [1.3.3.总结](#133总结)
|
||||
- [1.4. 说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗](#14-说说-jdk16-之后的-synchronized-关键字底层做了哪些优化可以详细介绍一下这些优化吗)
|
||||
- [1.5. 谈谈 synchronized 和 ReentrantLock 的区别](#15-谈谈-synchronized-和-reentrantlock-的区别)
|
||||
@ -167,11 +167,11 @@ public class Singleton {
|
||||
|
||||
```java
|
||||
public class SynchronizedDemo {
|
||||
public void method() {
|
||||
synchronized (this) {
|
||||
System.out.println("synchronized 代码块");
|
||||
}
|
||||
}
|
||||
public void method() {
|
||||
synchronized (this) {
|
||||
System.out.println("synchronized 代码块");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
@ -194,13 +194,13 @@ public class SynchronizedDemo {
|
||||
|
||||
在执行 `monitorexit` 指令后,将锁计数器设为 0,表明锁被释放。如果获取对象锁失败,那当前线程就要阻塞等待,直到锁被另外一个线程释放为止。
|
||||
|
||||
#### 1.3.2. `synchronized` 修饰方法的的情况
|
||||
#### 1.3.2. synchronized 修饰方法的的情况
|
||||
|
||||
```java
|
||||
public class SynchronizedDemo2 {
|
||||
public synchronized void method() {
|
||||
System.out.println("synchronized 方法");
|
||||
}
|
||||
public synchronized void method() {
|
||||
System.out.println("synchronized 方法");
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
@ -277,7 +277,7 @@ JDK1.6 对锁的实现引入了大量的优化,如偏向锁、轻量级锁、
|
||||
|
||||

|
||||
|
||||
要解决这个问题,就需要把变量声明为**`volatile`**,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。
|
||||
要解决这个问题,就需要把变量声明为 **`volatile`** ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。
|
||||
|
||||
所以,**`volatile` 关键字 除了防止 JVM 的指令重排 ,还有一个重要的作用就是保证变量的可见性。**
|
||||
|
||||
@ -293,7 +293,7 @@ JDK1.6 对锁的实现引入了大量的优化,如偏向锁、轻量级锁、
|
||||
|
||||
`synchronized` 关键字和 `volatile` 关键字是两个互补的存在,而不是对立的存在!
|
||||
|
||||
- **`volatile` 关键字**是线程同步的**轻量级实现**,所以**`volatile `性能肯定比` synchronized `关键字要好**。但是**`volatile` 关键字只能用于变量而 `synchronized` 关键字可以修饰方法以及代码块**。
|
||||
- **`volatile` 关键字**是线程同步的**轻量级实现**,所以 **`volatile `性能肯定比` synchronized `关键字要好** 。但是 **`volatile` 关键字只能用于变量而 `synchronized` 关键字可以修饰方法以及代码块 **。
|
||||
- **`volatile` 关键字能保证数据的可见性,但不能保证数据的原子性。`synchronized` 关键字两者都能保证。**
|
||||
- **`volatile`关键字主要用于解决变量在多个线程之间的可见性,而 `synchronized` 关键字解决的是多个线程之间访问资源的同步性。**
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user