一、什么是单例模式?
单例模式就是在整个系统内存中,某一个类只有一个实例,所有的请求都只用这一个对象。
二、饿汉式单例
1.使用静态变量初始化。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/27fc1e55b543338a6fe138c6cbe6caea.png)
2.使用静态代码块初始化。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/be21b57679635c6cf59b4aed2a46364b.png)
三、懒汉式单例
1.判断为空初始化
注意: 会有线程安全问题。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/53302f589da7b0768608354e4963e52d.png)
2.在方法上加锁。
虽然解决了线程安全问题, 但是效率会大大降低
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/472131a7457c2a0eff550582262e7dea.png)
3.在内部加锁。
也没有解决线程安全问题。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dd0a21ac3332665b29dc4f7276963351.png)
4.在内部加锁,并进行双重判断。
比较完美的写法,既解决了线程安全问题,又能提高效率的懒汉式单例,建议使用这种写法。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/082be8a94dd243f35c897ea3595bd87b.png)
5.使用静态内部类。
更完美的写法。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cd66526cb8e94692f1b3654b3e82b041.png)