一、单例模式
什么是单例?确保在整个应用程序中只能有一个实例对象存在。
单例模式创建方式:饿汉和懒汉。
饿汉就是太饿了,所以提前把饭(单例)做好。需要的时候直接吃了。
懒汉就是懒得做饭(生成单例),饿的时候再吃。
饿汉代码实现:
1.构造方法私有化。
2.定义一个私有静态变量,直接在类加载的时候,直接生成一个唯一变量。修饰词:private static final (不需要volatile)
3.提供1个公开获得该变量的方法,返回该变量就行。
public class Singleton{
//构造方法私有化
private Singleton(){
}
//类加载时候,直接生成唯一实例变量
private static final Singleton singleton = new Singleton();
//对外提供拿到它的唯一实例的方法
public static Singleton getSingleton(){
return singleton;
}
}
懒汉代码实现:
1.首先,将构造方法私有化,不对外提供构造方法。不然别人如果可以new对象,new出来的就不是同一个了。
2.先定义一个私有静态变量,初始化值null,并用volatile关键词修饰,确保可见性。保证直接从内存中读取最新值。修饰词:private volatile static
3.定义1个public static 供他人拿到该单例的方法,并采用双检索方式,解决线程安全问题,确保多线程环境下只会创建1个实例。文章来源:https://www.toymoban.com/news/detail-567018.html
该方法:先查,静态变量是否是空的。如果不是空的,直接返回。如果是空的,加一层synchroized锁,然后再判断是否是空的,如果是,就实例化new 1 个对象。这个方法只会走一次。文章来源地址https://www.toymoban.com/news/detail-567018.html
public class Singleton{
//构造函数私有化
private Singleton(){
};
//volatile 多线程可见,禁止指令重排,保证现场原子性
private volatile static Singleton singleton = null ;
// DCL 双重检索
public static Singleton getSingleton (){
if(singleton ==null){
synchronized(Singleton.class){
if(singleton ==null){
singleton = new Singleton();
}
}
}
return singleton ;
}
}
到了这里,关于单例模式代码怎么写?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!