java常见面试题:什么是单例模式(Singleton Pattern)?如何实现单例模式?

发布时间:2024年01月09日

单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这种模式通常用于创建频繁使用的对象,以减少系统资源消耗和提高性能。

实现单例模式有多种方法,其中最常见的是饿汉式和懒汉式。下面分别介绍这两种实现方式:

  1. 饿汉式实现:
    在类加载时,直接实例化对象并赋值给静态变量。这种方式称为饿汉式实现,因为它在类加载时就创建了实例,不需要等待外部调用。具体实现代码如下:

 

java复制代码

public class Singleton {
// 在类加载时就完成了初始化
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
  1. 懒汉式实现:
    在类加载时不实例化对象,而是等到第一次调用?getInstance()?方法时才实例化。这种方式称为懒汉式实现,因为它延迟了对象的创建时机。具体实现代码如下:

 

java复制代码

public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

需要注意的是,懒汉式实现存在线程安全问题。在多线程环境下,如果没有进行同步控制,可能会出现多个实例的情况。为了解决这个问题,可以使用双重检查锁定(double-checked locking)机制,具体代码如下:

 

java复制代码

public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}

这种实现方式在第一次调用?getInstance()?方法时才进行同步控制,避免了不必要的同步开销。同时,只有在实例为空时才进行同步控制,避免了多线程环境下创建多个实例的情况。

文章来源:https://blog.csdn.net/dxl920807/article/details/135437827
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。