一:单例模式
单例模式主要有四种实现方式
1:懒汉式
package test;
public class SingleTon {
private static SingleTon singleTon = null;
private SingleTon() {
};
// 懒汉式 线程不安全
public static SingleTon getSingleTon() {
if (singleTon == null) {
singleTon = new SingleTon();
}
return singleTon;
}
// 懒汉式 线程安全(但是每次访问)getSingleTon2都会在类上加锁,效率非常低
public static synchronized SingleTon getSingleTon2() {
if (singleTon == null) {
singleTon = new SingleTon();
}
return singleTon;
}
// 懒汉式 线程安全 先判断一次 如果为空 在类上加锁,然后再里面的判断是有几个线程进入
// 了第一个判断,但是只能走一个,走的这一个进行判断为空就创建,然后后面进入第一个空判断的线程
// 再判断就是存在的了。
public static SingleTon getSingleTon3() {
if (singleTon == null) {
synchronized (SingleTon.class) {
if (singleTon == null) {
singleTon = new SingleTon();
}
}
}
return singleTon;
}
// 静态内部类
静态内部类只在类第一次加载是被加载,所以是线程安全的。
private SingleTon(){}
private static class LazyClass {
private static final SingleTon SINGLE_TON = new SingleTon();
}
public static final SingleTon getSINGLE_TON() {
return LazyClass.SINGLE_TON;
}
//恶汉加载
private static final SingleTon TON = new SingleTon();
private static SingleTon getSingleTon4(){
return TON;
}
}