auto commit

This commit is contained in:
CyC2018
2018-04-08 23:34:51 +08:00
parent fe6730462c
commit e287699d38
5 changed files with 190 additions and 18 deletions

View File

@ -126,14 +126,13 @@ if (uniqueInstance == null) {
}
```
uniqueInstance 采用 volatile 关键字修饰也是很有必要的。
`uniqueInstance = new Singleton();` 这段代码其实是分为三步执行。
1. 分配内存空间。
2. 初始化对象。
3. 将 uniqueInstance 指向分配的内存地址。
1. 分配内存空间。
2. 初始化对象。
3. 将 uniqueInstance 指向分配的内存地址。
但是由于 JVM 具有指令重排的特性,有可能执行顺序变为了 `1>3>2`,这在单线程情况下自然是没有问题。但如果是多线程就有可能 B 线程获得是一个还没有被初始化的对象以致于程序出错。