饿汉模式
使用类的时候就已经将对象创建完毕,常见的方法就是直接new
实例化。
public class MyObject {
private static MyObject instance = new MyObject();
private MyObject() {
}
public static MyObject getInstance() {
return instance;
}
}
懒汉模式
就是在调用get()
方法时实例才被创建。为了保证线程安全,使用DCL
(Double-Check-Locking)双检查锁机制。
public class MyObject {
private volatile static MyObject instance;
private MyObject() {
}
public static MyObject getInstance() {
if (instance != null) {
} else {
synchronized (MyObject.class) {
if (instance == null) {
instance = new MyObject();
}
}
}
return instance;
}
}
使用静态内部类
public class MyObject {
private static class MyObjectHandler {
private static MyObject instance = new MyObject();
}
private MyObject() {
}
public static MyObject getInstance() {
return MyObjectHandler.instance;
}
}
使用静态代码块
public class MyObject {
private static MyObject instance = null;
static {
instance = new MyObject();
}
private MyObject() {
}
public static MyObject getInstance() {
return instance;
}
}
使用枚举类型
具体看此篇=>传送门
class Resource{
}
public enum SomeThing {
INSTANCE;
private Resource instance;
SomeThing() {
instance = new Resource();
}
public Resource getInstance() {
return instance;
}
}