更新时间:2023-09-12 来源:黑马程序员 浏览量:

要编写一个线程安全的单例模式(Singleton)类,我们可以使用以下方法之一。这两种方法都确保只有一个实例被创建,并且在多线程环境中安全使用。
在懒汉式中,实例在第一次被请求时才会被创建。
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有构造函数,防止外部实例化
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
} 这种方法使用了synchronized关键字来确保线程安全,但它会引入性能开销,因为每次调用getInstance方法都会进行同步。
双重检查锁定允许我们在没有同步的情况下创建实例,只有在实例不存在时才进行同步。
public class Singleton {
private static volatile Singleton instance;
private Singleton() {
// 私有构造函数,防止外部实例化
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}在这个版本中,我们使用了volatile关键字来确保instance变量对所有线程可见,避免了可能的重排序问题。
使用上述任何一种方法都可以创建一个线程安全的单例模式类。如果我们使用Java 5或更高版本,强烈建议使用双重检查锁定方法,因为它在性能上有一些优势。但要注意,这些示例中的单例模式是懒加载的,只有在需要时才会创建实例。如果我们需要在应用程序启动时立即创建实例,可以使用饿汉式(Eager Initialization)方法。
1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19