public enum SingleTon3 {
INSTANCE;
public static SingleTon3 getInstance(){
return INSTANCE;
}
//好处 没有线程安全问题
//反射破解问题
}
public class SingleTon2 {
public SingleTon2() {
}
static class Holder{
private static final SingleTon2 INSTANCE = new SingleTon2();
}
public static SingleTon2 getInstance(){
return Holder.INSTANCE;
}
}
public class SingleTon {
private SingleTon() {
//要禁止反射破解
synchronized (SingleTon.class) {
if (instance == null) {
throw new RuntimeException("不能使用反射破解");
}
}
}
private static volatile SingleTon instance; //valatile 不稳定的 易挥发的
//1.实现可见性 2.禁止指令重排序
public static SingleTon getInstance() {
if (instance == null) { //当第一线程进去创建了对象后 instance 就不为空了 if内的内容就不会执行了
synchronized (SingleTon.class) {
if (instance == null) {
instance = new SingleTon();
}
}
}
//System.out.println(instance.hashCode());
return instance;
}
}
public class Duixiang {
private Duixiang(){
}
private static Duixiang duixiang = new Duixiang();
public static Duixiang getDuixiang(){
return duixiang;
}
}