单例模式是基础设计模式之一

单例模式定义:

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

单例模式特点:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

 

单例模式:分饱汉式单例和饿汉式单例

 

饱汉式单例

public class  enumTest {
private final static enumTest enumTest = new enumTest();
private enumTest(){}

/**
* 饿汉式,类加载完成实例化,避免线程同步
* @return
*/
public static enumTest getInstance(){
return enumTest;
}
}



饿汉式单例:
public class Test {
private static Test test;
private Test(){ }

/**
* 懒汉式 线程不安全(只能单线程使用,多线程,一个线程进入判断语句块,未来得及往下执行,另一线程也通过此判断语句,产生多个实例)
*
* @return
*/
public static Test getInstance(){
if(test == null) {
test = new Test();
}
return test;

}


/**
* 线程安全 懒汉式
* 缺点:效率低 每个线程在想获得类的实例时候,执行此方法 都要进行同步
* @return
*/
public static synchronized Test getInstance1(){
if(test == null){
test = new Test();
}
return test;
}



/**
* 双重检查 懒汉式(推荐使用)
* 优点:线程安全,延迟加载,效率较高
* @return
*/
public static Test getInstance2(){
if(test == null){
synchronized(Test.class){
if(test ==null){
test = new Test();
}
}
test = new Test();
}
return test;
}
}

综上所述,推荐使用双重检查懒汉式单例模式 或 饱汉式单例模式(其实对内存的影响可以忽略不计)

posted on 2021-10-11 17:39  依依Love  阅读(39)  评论(0编辑  收藏  举报