定义:
保证一个类只有一个实例,并提供一个全局访问点
类型:创建型
应用场景
1.只希望有一个实例。
优点
- 减少内存的开销
- 避免对资源的多重利用
缺点
- 无接口。
源码应用的场景
- Runtime类
public class Runtime {
private static Runtime currentRuntime = new Runtime();
public static Runtime getRuntime() {
return currentRuntime;
}
}
demo
LazyDoubleCheckSingleton
package creational.singleton;
import java.io.Serializable;
public class LazyDoubleCheckSingleton{
private LazyDoubleCheckSingleton(){}
/**
* volatile
*/
private static volatile LazyDoubleCheckSingleton instance;
public static LazyDoubleCheckSingleton getInstance(){
if(instance == null){
synchronized (LazyDoubleCheckSingleton.class){
if(instance == null){
instance = new LazyDoubleCheckSingleton();
}
}
}
return instance;
}
}
LazyDoubleCheckSingleton
package creational.singleton;
import java.io.Serializable;
public class LazyDoubleCheckSingleton implements Serializable {
private static final long serialVersionUID = 1L;
private LazyDoubleCheckSingleton(){}
/**
* volatile
*/
private static volatile LazyDoubleCheckSingleton instance;
public static LazyDoubleCheckSingleton getInstance(){
if(instance == null){
synchronized (LazyDoubleCheckSingleton.class){
if(instance == null){
instance = new LazyDoubleCheckSingleton();
}
}
}
return instance;
}
}