横店八上信息书做网站的内容,宁化县建设局网站,wordpress 建点,网页设计版式图片Java中实现单例模式的常见方式有两种#xff1a;懒汉式和饿汉式。以下是这两种方式的简单示例#xff1a;
饿汉式
饿汉式单例模式在类加载时就完成了实例的初始化#xff0c;以空间换时间#xff0c;确保了实例的唯一性。
public class Singleton {// 在自己内部定义自己…Java中实现单例模式的常见方式有两种懒汉式和饿汉式。以下是这两种方式的简单示例
饿汉式
饿汉式单例模式在类加载时就完成了实例的初始化以空间换时间确保了实例的唯一性。
public class Singleton {// 在自己内部定义自己一个实例是不会被外界访问的private static final Singleton instance new Singleton();// 构造器私有化外部无法直接通过new来实例化对象private Singleton() {}// 对外提供一个公共的静态方法返回唯一实例public static Singleton getInstance() {return instance;}}
懒汉式
懒汉式单例模式只有在真正需要使用时才会创建实例实现了懒加载。
public class Singleton {// 声明变量private static Singleton instance null;// 构造器私有化private Singleton() {}// 提供一个静态方法当使用到该方法时才去创建instancepublic static synchronized Singleton getInstance() {if (instance null) {instance new Singleton();}return instance;}}
懒汉式虽然实现了懒加载但是在多线程环境下可能会创建多个实例因此需要加锁处理这就是上面示例中使用synchronized关键字的原因。但是加锁会影响效率。
双重检查锁定Double-Checked Locking
为了解决懒汉式的线程安全问题同时又不牺牲效率可以使用双重检查锁定模式。
public class Singleton {// 使用volatile关键字保其可见性和有序性private static volatile Singleton instance null;private Singleton() {}public static Singleton getInstance() {if (instance null) {synchronized (Singleton.class) {if (instance null) {instance new Singleton();}}}return instance;}}
这种方式既实现了线程安全又避免了每次调用getInstance方法时都需要进行同步。
枚举方式
Java语言规范提供的一种更简洁的单例实现方式是使用枚举。
public enum Singleton {INSTANCE;public void someMethod() {// 实例方法}}
使用枚举方式实现单例不仅简洁而且提供了序列化机制并由JVM从根本上提供保障避免多次实例化是实现单例模式的最佳方法。