java线程安全懒汉式代码
时间: 2023-06-05 15:06:47 浏览: 60
可以通过以下方式实现:
```
public class Singleton {
private static Singleton instance = null;
private Singleton() { }
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
这种方式会在调用 `getInstance()` 方法时进行同步操作,确保线程安全。但是由于每个调用 `getInstance()` 方法的线程都需要进行同步操作,因此会影响程序的性能。因此,建议在多线程场景下使用双重检查锁定方式实现懒汉式单例模式。
相关问题
单例懒汉线程安全代码
以下是使用双重检查锁定实现的懒汉式单例模式代码,可以确保线程安全:
```java
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
```
以上代码中,使用了 volatile 关键字来确保 instance 变量对所有线程的可见性,双重检查锁定机制确保了线程安全。在第一次调用时,如果 instance 为 null,就会创建一个新的实例,以后每次调用都会返回之前创建的实例。
java代码单例模式懒汉式
懒汉式单例模式的实现方式是在第一次调用时才创建对象。以下是Java代码实现:
```java
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if(instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
```
在上面的代码中,私有构造函数确保了只能通过getInstance()方法获取实例。getInstance()方法中,如果没有创建实例,就会创建一个新的实例并返回,否则直接返回已有的实例。
需要注意的是,这种实现方式是线程不安全的,如果多个线程同时调用getInstance()方法,有可能会创建出多个实例。可以通过加锁来解决线程安全问题,但会导致性能下降,因此通常建议使用饿汉式单例模式。