淘宝网冬季女装外套,2tu电影,吴嘉熙
单例模式想必大家都已经很熟悉了,通常它的实现方式分为以下两种:
//饿汉式
public class singleton{
private static singleton instance = new singleton();
private singleton(){}
public static singleton newinstance(){
return instance;
}
public void dosomething(){
// do something ...
}
}
在单利模式的使用中,懒汉式和饿汉式有不同的应用场景,如果创建单利对象很占内存但是不是在应用启动是必须使用的,我们一般会使用懒汉式,等到真的需要使用单利时才会去创建它,如果随着项目启动要立即使用我们会使用饿汉模式在初始化是创建单利对象。
上述两种模式中,如果在多线程的情况下,饿汉式不会出现问题,因为jvm只会加载一次单利类,但是懒汉式可能就会出现重复创建单利对象的问题,是线程不安全的。
那有没有办法,使饿汉式的单利模式也是线程安全的呢?答案肯定是有的,大家通常会使用加同步锁的方式去实现,但是这样实现起来比较麻烦,我们可以利用jvm的类加载机制去实现。在很多情况下jvm已经为我们提供了同步控制,比如:
a.在static{}区块中初始化的数据
b.访问final字段时 等等。
在jvm进行类加载的时候他会保证数据是同步的,我们可以这样实现:
采用类级内部类,在这个内部类里面去创建对象实例。这样的话,只要不使用类级内部类他就不会去创建对象实例,从而实现懒汉式的延迟加载和线程安全。
这样就可以实现线程安全的饿汉式单利模式。
另外我们还可以通过枚举类型来实现单利模式,这也是比较推荐的方式。
使用枚举类型实现单例模式如下:
ok,单例模式先介绍到这里。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论