文章内容输出来源:拉勾教育JAVA就业训练营
总目录跳转链接:总目录
设计模式总目录:【设计模式】设计模式(目录)
如有侵权请联系本人
邮箱:xiaogueika@tom.com
单例设计模式
单例设计模式主要分为:饿汉式 和 懒汉式,懒汉式需要对多线程进行同步处理。
单例饿汉式设计模式
/**
* 单例懒汉式设计模式
* @author: gk
* @date: 2021年01月25日 11:40
* @version: 1.0
*/
public class Singleton {
//2.声明本类类型的引用指向本类类型的对象并使用private static关键字修饰
private static Singleton sin = null;
//1.私有化构造方法,使用private关键字修饰
private Singleton(){}
//3.提供公有的get方法负责浮上述对象返回出去,使用public static关键字修饰
public static Singleton getInstance(){
if (null == sin){
sin = new Singleton();
}
return sin;
}
}
单例懒汉式设计模式
/**
* 单例懒汉式设计模式
* @author: gk
* @date: 2021年01月25日 11:40
* @version: 1.0
*/
public class Singleton {
//2.声明本类类型的引用指向本类类型的对象并使用private static关键字修饰
private static Singleton sin = null;
//1.私有化构造方法,使用private关键字修饰
private Singleton(){}
//3.提供公有的get方法负责浮上述对象返回出去,使用public static关键字修饰
public static synchronized Singleton getInstance(){
synchronized(Singleton.class){
if (null == sin){
sin = new Singleton();
}
return sin;
}
}
}
优化:
- 只需要锁第一次,所以可以用
if (null == sin)
判断,如果为空再去看看是否前面有线程
代码如下
/**
* 单例懒汉式设计模式
* @author: gk
* @date: 2021年01月25日 11:40
* @version: 1.0
*/
public class Singleton {
//2.声明本类类型的引用指向本类类型的对象并使用private static关键字修饰
private static Singleton sin = null;
//1.私有化构造方法,使用private关键字修饰
private Singleton(){}
//3.提供公有的get方法负责浮上述对象返回出去,使用public static关键字修饰
public static synchronized Singleton getInstance(){
/*synchronized(Singleton.class){
if (null == sin){
sin = new Singleton();
}
return sin;
}*/
if(null == sin){
synchronized(Singleton.class){
if (null == sin){
sin = new Singleton();
}
}
}
return sin;
}
}