单例模式线程安全的写法

单例模式线程安全的写法


2024年4月20日发(作者:)

单例模式线程安全的写法

单例模式是一种常用的设计模式,它保证一个类只有一个实例,并

提供一个全局访问点。在多线程环境下,单例模式的实现需要考虑线

程安全性,以避免多个线程同时创建多个实例。

在单例模式的线程安全写法中,常用的有懒汉式和饿汉式两种方式。

懒汉式是指在需要获取实例时才进行实例化,而饿汉式是指在类加

载时就进行实例化。下面分别介绍这两种方式的线程安全写法。

首先是懒汉式的线程安全写法。懒汉式的特点是延迟加载,即在第

一次使用时才创建实例。为了保证线程安全,可以使用双重检查锁定

的方式。具体实现如下:

```java

public class Singleton {

private static volatile Singleton instance;

private Singleton() {

// 私有构造方法

}

public static Singleton getInstance() {

if (instance == null) {

synchronized () {

if (instance == null) {

instance = new Singleton();

}

}

}

return instance;

}

}

```

在上述代码中,使用了volatile关键字来保证instance的可见性,避

免了指令重排序导致的线程安全问题。另外,使用双重检查锁定的方

式可以减少锁的竞争,提高性能。

接下来是饿汉式的线程安全写法。饿汉式的特点是在类加载时就创

建实例,因此不存在线程安全问题。具体实现如下:

```java

public class Singleton {

private static final Singleton instance = new Singleton();

private Singleton() {

// 私有构造方法

}

public static Singleton getInstance() {

return instance;

}

}

```

在上述代码中,instance被声明为final,保证了其不可变性,从而

避免了线程安全问题。

总结来说,单例模式的线程安全写法可以通过懒汉式的双重检查锁

定方式或饿汉式的直接实例化方式来实现。懒汉式需要考虑指令重排

序和锁的竞争问题,而饿汉式则不存在线程安全问题。根据具体的需

求和性能要求,选择适合的方式来实现单例模式。


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713544001a2269968.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信