设计模式-单例模式

单例模式分两种实现,懒汉式和饿汉式。我们先来看看饿汉式
1.饿汉式,虚拟机加载类时会去初始化我们的静态变量,这里静态资源初始化会去调用clinit方法,这个方法内部是线程安全的。下面我看一下例子:
在这里插入图片描述
饿汉式实现很简单,由于加载时就初始化。这样如果没用到就会浪费内存空间。一般不会用这种单例实现。
2.懒汉式就是我们用到该对象时才加载。不会一上来就加载。懒汉式有很多种写法,我们来看一下这些怎么来实现。下面我们看一下例子:
在这里插入图片描述
上面这种实现方式,是可以延迟加载,我们使用时才会去加载,但是在高并发的场景会有一个问题。有可能多个线程都能创建自己的对象。这样就不时单实例了。所以高并发场景我们有了以下的写法
在这里插入图片描述
上面这种写法叫双重检测锁,这种写法是应对高并发场景,既能保证高并发的效率,也能保证并发的线程安全问题。下面还有一种简单的写法也能保证高并发和线程安全问题。看一下例子:
在这里插入图片描述
我们这里使用到了内部静态类来实现,类加载时不会加载静态内部类。当我们在调用getInstance时这是才会去加载静态内部类的静态变量。然后才会调用初始化方法去创建对象。初始化过程是线程安全的。jvm只会初始化一次。所以我们平时一般会采用后两种方法来构造我们的单例

发布了2 篇原创文章 · 获赞 1 · 访问量 19
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览