单例模式

前言

今天写demo的时候对单例有些疑问,就查资料总结下

正文

单例模式

单例模式是一种常用的设计模式,单例是某个类只能有一个实例,而且必须是它自己创建的一个实例。它必须对外提供一个静态方法来实现实例。单例分懒汉和饿汉。

饿汉式

饿汉式主要缺点,使用多线程的时候,就会实例化多次,占用资源。

懒汉式

懒汉式的缺点是线程不安全,一般情况下是不加锁的,第一个线程还没实例化,第二个线程就加进来了,这样就不属于单例的情况。但是加锁就会出现一个线程进去就加锁判断,再释放,再加锁释放,这样就造成了性能低下,所以使用双重判空。使用volatile可见性,是使Dome类创建的时候有序,在堆中创建一个对象,然后dome指向这个对象,最后赋值。避免还没赋值,cpu被强占,直接下一个进程进行判空,但dome还没有被赋值,导致程序崩溃了。这就是一个DCL失效问题。

静态内部类


外部类加载时并不需要立即加载内部类,所以不占用内存。只用第一次被调用的时候,才会去初始化Dome。

-------------本文结束感谢您的阅读-------------