Java单例模式两种实用有趣的写法

Java单例模式两种实用有趣的写法

1.内部类实现

1
2
3
4
5
6
7
8
9
10
11
12
Class Singleton{

private static class HelperHolder{

public static final Helper helper=new Helper();

}

public static Helper newInstance(){
return HelperHolder.helper;
}
}

为什么说有趣呢,内部类的实现能够延迟初始化(Lazy initialization),并且多线程安全,还保证了高性能。

为什么会延迟初始化呢,因为java的语言特性,内部类只有在使用的时候才会去加载,从而初始化内部静态变量。

为什么没有加线程锁会是线程安全的呢,Java运行环境自动给你保证的,加载的时候会自动隐形同步。

为什么是高性能呢,在访问对象时,不需要同步java虚拟机,又会自动给你取消息同步,所以效率高。

2.枚举实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public enum Singleton{

INSTANCE;

private Singleton(){

}

public Helper newInstance(){

return new Helper();

}

}

枚举的实现 即使使用反射机制也无法多次实例化一个枚举量,也是线程安全的

摘自 Thinking in Java《JAVA编程思想》


Java单例模式两种实用有趣的写法
http://example.com/2016/04/01/program/Java单例模式两种实用有趣的写法/
作者
hao88
发布于
2016年4月1日
许可协议