如何使用静态内部类实现单例模式
时间: 2023-09-05 14:10:53 浏览: 100
使用静态内部类实现单例模式可以避免多线程并发访问的问题,同时实现简单方便。具体实现方法如下:
```java
public class Singleton {
// 私有化构造方法
private Singleton() {}
// 静态内部类,用于实例化单例对象
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
// 获取单例对象的方法
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
在上面的代码中,静态内部类 SingletonHolder 被声明为私有的,只有 Singleton 类可以访问它。在 SingletonHolder 中实例化了一个 Singleton 对象,且该实例化操作只会在类加载时执行一次,保证了线程安全性。由于 SingletonHolder 是一个静态内部类,只有在调用 getInstance() 方法时才会进行类加载,因此实现了懒加载的效果。
调用获取单例对象的方法 Singleton.getInstance() 时,会返回 SingletonHolder 中实例化的 Singleton 对象,保证了单例对象的唯一性。
相关问题
java静态内部类实现单例模式卖票
可以使用静态内部类实现单例模式卖票,代码如下:
```java
public class TicketSeller {
private TicketSeller() {}
private static class TicketHolder {
private static final TicketSeller INSTANCE = new TicketSeller();
}
public static TicketSeller getInstance() {
return TicketHolder.INSTANCE;
}
public void sellTicket() {
// 卖票操作
}
}
```
这样,在需要使用 TicketSeller 的地方,可以通过 `TicketSeller.getInstance()` 获取单例对象。
静态内部类实现单例
静态内部类实现单例是一种比较优秀的单例模式实现方式,它是基于类加载器的机制来保证线程安全的。具体实现方式如下:
```java
public class Singleton {
// 私有化构造函数
private Singleton() {}
// 静态内部类,用于实现单例模式
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
// 获取单例对象
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
在上面的实现中,静态内部类 SingletonHolder 中持有了 Singleton 的实例对象 INSTANCE,只有在调用 getInstance() 方法时,才会对 SingletonHolder 进行初始化,从而创建 Singleton 的实例对象。由于静态内部类 SingletonHolder 是私有的,并且只会被加载一次,因此可以保证线程安全,同时也能够延迟加载,提高了单例对象的创建效率。
阅读全文