单列模式
什么事单例设计模式
jvm保证只能有一个实例
分为两种:一种懒汉式,饿汉式
懒汉式:线程不安全,是需要的时候才创建
懒汉:双重检验锁
饿汉式:线程天生安全,jvmclass加载的时候就初始化
懒汉式代码:
class SingletonTest { publicstaticvoid main(String[] args) { Singleton sl1 = Singleton.getSingleton(); Singleton sl2 = Singleton.getSingleton(); System.out.println(sl1 == sl2); } }
publicclass Singleton { // 当需要的才会被实例化 privatestatic Singleton singleton; private Singleton() { } synchronizedpublicstatic Singleton getSingleton() { if (singleton == null) { singleton = new Singleton(); } returnsingleton; } }
|
双重检验锁
// 懒汉式 第二种写法 效率高 双重检验锁 staticpublic Singleton getSingleton2() {
if (singleton == null) { // 第一步检验锁 synchronized (Singleton.class) { // 第二步检验锁 if (singleton == null) { singleton = new Singleton(); }
} }
returnsingleton; } |
饿汉式代码
class SingletonTest1 { publicstaticvoid main(String[] args) { Singleton1 sl1 = Singleton1.getSingleton(); Singleton1 sl2 = Singleton1.getSingleton(); System.out.println((sl1 == sl2)+"-"); } } publicclass Singleton1 { //当class 文件被加载初始化 privatestatic Singleton1 singleton = new Singleton1(); private Singleton1() { } publicstatic Singleton1 getSingleton() { returnsingleton; }
} |