懒汉单例模式代码Java实现
时间: 2023-03-30 07:00:51 浏览: 67
以下是懒汉单例模式的 Java 代码实现:
```
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
```
这是一个线程安全的懒汉单例模式,通过 getInstance() 方法获取实例。
相关问题
java实现懒汉单例模式
懒汉单例模式是指在需要时才创建对象实例,而不是在类加载时就创建对象实例。下面是Java实现懒汉单例模式的示例代码:
```
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
在上述代码中,Singleton类的构造方法是私有的,因此外部无法直接创建对象实例。getInstance()方法是用来获取Singleton类的唯一实例的,它首先判断instance是否为null,如果为null则创建一个新的Singleton对象,否则直接返回已经存在的实例。
需要注意的是,由于懒汉单例模式在多线程环境下存在线程安全问题,因此在getInstance()方法中需要对instance进行线程同步,以保证多线程环境下仍然能够正确地返回Singleton实例。
为了保证线程安全性,可以通过synchronized关键字来实现线程同步,或者使用双重检查锁定机制(Double-Checked Locking),如下所示:
```
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
或者:
```
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;
}
}
```
在第一种方式中,getInstance()方法被加上了synchronized关键字,以保证线程安全性。在第二种方式中,使用了双重检查锁定机制,即先判断instance是否为null,如果为null,则对Singleton类进行加锁,然后再次判断instance是否为null,如果仍为null,则创建一个新的Singleton对象。由于使用了volatile关键字,可以确保在多线程环境下,对instance的读取和写入操作都是原子性的,从而避免了线程安全问题。
懒汉单例模式 java_Java懒汉式单例模式详解
懒汉式单例模式是指在需要使用对象的时候才进行创建,而不是一开始就创建。这种方式的好处是可以节省系统资源,但是需要注意线程安全问题。
在Java中实现懒汉式单例模式可以采用以下方式:
```
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
在上述代码中,使用了synchronized关键字来保证线程安全。但是这种方式在高并发环境下会导致性能问题。为了解决这个问题,可以采用双重检查锁定的方式。
```
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;
}
}
```
在上述代码中,使用了volatile关键字来保证instance对所有线程的可见性,同时采用双重检查锁定来保证线程安全和性能。