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
new ThreadLocal
@Override
protected Singleton initialValue() {
return new Singleton();
}
};
public static Singleton getInstance() {
return ();
}
}
```
7. 注册式单例模式
注册式单例模式指的是将每个实例注册到一个容器中,按照需要取出使用。这种写法需要实现一个容器,代码较为复杂。代码如下:
```
public class SingletonManager {
private static Map
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中七种常用的单例模式写法。每种写法都有其优缺点,需要根据具体场景选择合适的实现方式。
版权声明:本文标题:单例的七种写法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1708352848h521041.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论