单例的七种写法单例模式的几种实现方式
单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在实际开发中,我们经常会遇到需要使用单例模式的场景。在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 (Singleton.class) {
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 SingletonHolder.INSTANCE;
}
}
```
5. 枚举单例模式
枚举单例模式指的是利用枚举类型的特点实现单例。这种写法没有使用锁,因此线程安全且代码简洁。代码如下:
```
public enum Singleton {
INSTANCE;
public void doSomething() {
// some code here
}
}
```
6. ThreadLocal单例模式
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论