admin 管理员组

文章数量: 887021


2024年2月19日发(作者:常用的高级程序设计语言)

单例的七种写法

单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在实际开发中,我们经常会遇到需要使用单例模式的场景。在Java中,单例模式有七种写法,下面我们来逐一介绍。

1. 饿汉式单例模式

饿汉式单例模式指的是在类加载时就实例化了该类的唯一实例。这种写法没有使用锁,因此线程安全。代码如下:

```

public class Singleton {

private static final Singleton instance = new Singleton();

private Singleton() {}

public static Singleton getInstance() {

return instance;

}

}

```

2. 懒汉式单例模式

懒汉式单例模式指的是在第一次使用时才实例化该类的唯一实例。这种写法需要使用同步锁,因此效率较低。代码如下:

```

public class Singleton {

private static Singleton instance;

private Singleton() {}

public static synchronized Singleton getInstance() {

if (instance == null) {

instance = new Singleton();

}

return instance;

}

}

```

3. 双重校验锁单例模式

双重校验锁单例模式指的是先判断实例是否存在,若不存在,则进入同步块进行实例化,提高效率。这种写法需要使用volatile修饰实例,保证线程安全。代码如下:

```

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;

}

}

```

4. 静态内部类单例模式

静态内部类单例模式指的是利用静态内部类的加载机制实现单例。这种写法没有使用锁,因此线程安全且效率高。代码如下:

```

public class Singleton {

private Singleton() {}

private static class SingletonHolder {

private static final Singleton INSTANCE = new Singleton();

}

public static Singleton getInstance() {

return CE;

}

}

```

5. 枚举单例模式

枚举单例模式指的是利用枚举类型的特点实现单例。这种写法没有使用锁,因此线程安全且代码简洁。代码如下:

```

public enum Singleton {

INSTANCE;

public void doSomething() {

// some code here

}

}

```

6. ThreadLocal单例模式

ThreadLocal单例模式指的是利用ThreadLocal变量实现每个线程拥有自己的实例。这种写法没有使用锁,因此线程安全且效率高。代码如下:

```

public class Singleton {

private Singleton() {}

private static final ThreadLocal threadLocal =

new ThreadLocal() {

@Override

protected Singleton initialValue() {

return new Singleton();

}

};

public static Singleton getInstance() {

return ();

}

}

```

7. 注册式单例模式

注册式单例模式指的是将每个实例注册到一个容器中,按照需要取出使用。这种写法需要实现一个容器,代码较为复杂。代码如下:

```

public class SingletonManager {

private static Map map = new

ConcurrentHashMap();

private SingletonManager() {}

public static void register(String name, Object object) {

if (!nsKey(name)) {

(name, object);

}

}

public static Object getSingleton(String name) {

return (name);

}

}

```

以上就是Java中七种常用的单例模式写法。每种写法都有其优缺点,需要根据具体场景选择合适的实现方式。


本文标签: 单例 模式 写法