commit
5d197ffff3
|
@ -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;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
(六)枚举实现
|
||||
|
||||
这是单例模式的最佳实践,它实现简单,并且在面对复杂的序列化或者反射攻击的时候,能够防止实例化多次。
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user