java线程安全的单例模式代码
时间: 2023-11-28 16:42:46 浏览: 36
以下是Java线程安全的单例模式代码:
```
public class Singleton {
private static volatile Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
```
这个单例模式代码使用了双重检查锁定(double-checked locking)来确保线程安全。在第一次检查中,如果实例已经存在,那么就直接返回实例。如果实例不存在,那么就进入同步块,在同步块中再次检查实例是否存在,如果不存在,那么就创建实例。使用volatile关键字可以确保多线程环境下的可见性和有序性。
相关问题
线程安全的单例模式代码
以下是线程安全的单例模式代码:
```java
public class ThreadSafeSingleton {
private static volatile ThreadSafeSingleton instance;
private ThreadSafeSingleton() {}
public static ThreadSafeSingleton getInstance() {
if (instance == null) {
synchronized (ThreadSafeSingleton.class) {
if (instance == null) {
instance = new ThreadSafeSingleton();
}
}
}
return instance;
}
}
```
在这个实现中,我们使用了双重检查锁(double-checked locking)来确保线程安全。在 `getInstance()` 方法中,第一次检查 `instance` 是否为 `null`,如果是,那么就进入同步块。在同步块中,我们再次检查 `instance` 是否为 `null`,这是因为多个线程可能已经通过了第一次检查并等待进入同步块,如果不进行第二次检查,那么就会创建多个实例。
`volatile` 关键字确保了多个线程可以正确地处理 `instance` 变量,这是因为 `volatile` 可以禁止指令重排,从而确保在多线程环境下 `instance` 的正确性。
java 实现单线程 单例模式 代码
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
// 使用方法:
Singleton singleton = Singleton.getInstance();