java常见面试题:什么是单例模式(Singleton Pattern)?如何实现单例模式?
2024-01-09 17:49:14
单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这种模式通常用于创建频繁使用的对象,以减少系统资源消耗和提高性能。
实现单例模式有多种方法,其中最常见的是饿汉式和懒汉式。下面分别介绍这两种实现方式:
-
饿汉式实现:
在类加载时,直接实例化对象并赋值给静态变量。这种方式称为饿汉式实现,因为它在类加载时就创建了实例,不需要等待外部调用。具体实现代码如下:
java复制代码
public class Singleton { | |
// 在类加载时就完成了初始化 | |
private static Singleton instance = new Singleton(); | |
private Singleton() {} | |
public static Singleton getInstance() { | |
return instance; | |
} | |
} |
-
懒汉式实现:
在类加载时不实例化对象,而是等到第一次调用?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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!