Merge pull request #311 from xiangflight/master

已解决冲突,增加单例的另一种实现
This commit is contained in:
郑永川 2018-07-11 07:29:03 +08:00 committed by GitHub
commit 5d197ffff3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -151,7 +151,29 @@ uniqueInstance 采用 volatile 关键字修饰也是很有必要的。`uniqueIns
使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。
(五)枚举实现
(五)静态内部类实现
这种实现方式的原理:当静态类加载时,静态内部类没有加载进内存。只有当外部调用`getInstance()`方法,静态内部类才会被加载并实例化一个单例的对象,之后每次
调用`getInstance()`都会获取相同的对象。此方法不需要同步。
```java
public class Singleton {
private Singleton() {
}
private static class SingletonHelper {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getUniqueInstance() {
return SingletonHelper.INSTANCE;
}
}
```
(六)枚举实现
这是单例模式的最佳实践,它实现简单,并且在面对复杂的序列化或者反射攻击的时候,能够防止实例化多次。