浅谈java单例设计模式

上次说了简单的单例设计模式,这次说其他的几个模式。

 

1.饿汉式(静态代码块)

这个模式是线程安全的,但是不具备懒加载功能,只要用到了就实例,不具备懒加载,比较消耗性能,所以不推荐。

2.懒汉式

这是常规的懒汉式写法,需要就加载,不用不加载,但是是线程不安全的。试想一下,两个线程若同时访问if代码,那么两个线程都会判为null,所以就会创建两个实例。

3.线程安全的懒汉式:

还是两条线程同时访问,但是由于synchronized关键字的作用,第二条线程会等待第一条线程执行完毕才会进入,虽然不会再创建线程了,但是这种方法效率低下。

 4.双重检查模式(推荐)

看注释,不解释。两条判断缺一不可。

volatile关键字的作用:

首先说一下新建一个对象需要的三个步骤:

1.新建一个对象,但还未初始化。

2.调用构造函数初始化该对象.

3.把对象指向引用。

再双重检查模式里面,如果不加volatile关键字,很容易出现半成品的实例对象,执行的顺序可能就是132。加上volatile可以保证对象会完成初始化,不会被重排序。

5.静态内部类:

这种方式是推荐的,由于java的类加载机制,外部类被执行的时候,内部类是不会被加载的,只有调用静态方法的时候才会被加载,这样也实现了懒加载,对性能也很友好。

最后来说说单例模式的枚举类

 枚举类有三个优点:

1.写法简介,就一句就搞定了。

2.线程安全,枚举是不允许反序列化。

3.防止反射,因为枚举类是不允许反射的。

更推荐大家使用枚举类

好的 我说完了。

那么我们有病再见!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值