JAVA单例模式
Posted 一只小小寄居蟹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA单例模式相关的知识,希望对你有一定的参考价值。
单例模式有两种设计:
- 延迟加载(懒汉式)
- 私有构造方法
- 创建本类对象,但不初始化
- 创建静态方法进行初始化对象并返回
- 立即加载(饿汉式)
- 私有构造方法
- 创建本类的对象并初始化(私有的)
- 创建静态方法获取本类对象
举例1.
/** * 延迟加载(懒汉式) * 1.私有构造方法 * 2.创建本类对象,但不初始化 * 3.创建静态方法进行初始化对象并返回 * * 优点: * 使用到类的对象才会加载,不消耗内存 * 缺点: * 可能会出现线程安全问题,但是可以使用同步代码块消除这个安全问题 * */ public class SingleExample { private SingleExample(){} // 创建本类对象,不初始化 private static SingleExample instance ; private static SingleExample getInstance(){ if (instance == null) { // 同步代码块 synchronized (SingleExample.class) { if (instance == null) { instance = new SingleExample(); } } } return instance; } public static void main(String[] args) { System.out.println("1." + SingleExample.getInstance()); System.out.println("2." + SingleExample.getInstance()); System.out.println("3." + SingleExample.getInstance());// 均是同一个对象,在同一个内存中 } }
举例2.
/** * 立即加载(饿汉式) * 1.私有构造方法 * 2.创建本类的对象并初始化(私有的) * 3.创建静态方法获取本类对象 * * 优点: * 保证的线程的安全,没有线程安全问题 * 缺点: * 使用类就会加载,比较消耗内存 */ public class ImmediateSingle { private ImmediateSingle(){} private static ImmediateSingle instance = new ImmediateSingle(); public static ImmediateSingle getInstance(){ return instance; } }
以上是关于JAVA单例模式的主要内容,如果未能解决你的问题,请参考以下文章