2016 - 2024

感恩一路有你

java线程安全的单例代码 Java线程安全的单例模式

浏览量:4841 时间:2023-12-09 19:16:50 作者:采采

1. 线程安全的单例模式概述

单例模式是一种常用的设计模式,它能够确保一个类只有一个实例对象,并提供全局访问点。然而,在多线程环境下使用单例模式时,需要注意线程安全性,以避免多个线程同时创建多个实例对象。

2. 单例模式的经典实现方式

2.1 饿汉式

饿汉式是最简单的一种实现方式,它在类加载时就创建了实例对象,并通过静态方法提供访问点。

public class Singleton {
    private static final Singleton instance  new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}

饿汉式的实现方式简单直接,但无法进行延迟加载,会在类加载时就创建实例对象。

2.2 懒汉式(双重检查锁)

懒汉式采用延迟加载的方式,在第一次使用时才创建实例对象。为了保证线程安全性,需要采用双重检查锁机制。

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

通过使用volatile关键字和双重检查锁机制,可以确保在多线程环境下获取到正确的唯一实例对象。

3. 其他线程安全的单例模式实现方式

3.1 静态内部类

静态内部类方式采用类的静态成员变量来持有实例对象,通过静态内部类的延迟加载特性,可以在多线程环境下安全地获取单例实例。

public class Singleton {
    private static class SingletonHolder {
        private static final Singleton instance  new Singleton();
    }
    private Singleton() {}
    public static Singleton getInstance() {
        return ;
    }
}

3.2 枚举

枚举方式是最简洁和安全的单例实现方式,枚举成员在类加载时就被创建,并且保证在多线程环境下只有一个实例对象。

public enum Singleton {
    INSTANCE;
    // 单例对象的其他方法
}

4. 总结

本文介绍了Java中线程安全的单例模式,并提供了多种实现方式,包括饿汉式、懒汉式(双重检查锁)、静态内部类和枚举。在多线程环境下,使用线程安全的单例模式能够确保只有一个实例对象被创建和访问,从而避免多个线程同时创建多个实例对象的问题。

参考链接:

- Java单例模式详解:

- Java并发编程实战:

Java 线程安全 单例模式 代码

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。