单例模式java实现
时间: 2024-07-05 15:01:13 浏览: 104
单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式有多种方式,其中比较常用的是饿汉式和懒汉式两种方式。
饿汉式单例模式是在类加载时就创建了实例,因此线程安全,但可能会浪费一些资源。懒汉式单例模式是在第一次使用时才创建实例,因此节省了资源,但需要考虑线程安全问题。
以下是饿汉式单例模式的Java实现代码:
```
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
```
以下是懒汉式单例模式的Java实现代码:
```
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
相关问题
单例模式java
单例模式是一种设计模式,它确保一个类只有一个实例,并提供全局访问点。
在Java中,可以通过以下方式实现单例模式:
1. 懒汉式单例模式
```java
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
这种方式下,只有在第一次使用getInstance()方法时才会创建单例对象。
2. 饿汉式单例模式
```java
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
```
这种方式下,单例对象在类加载时就已经创建好,因此可以保证线程安全。
3. 双重校验锁单例模式
```java
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;
}
}
```
这种方式下,通过双重校验锁实现了懒加载和线程安全。
4. 静态内部类单例模式
```java
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
这种方式下,通过静态内部类实现了懒加载和线程安全。当Singleton类被加载时,静态内部类SingletonHolder不会被加载,只有在第一次调用getInstance()方法时才会加载SingletonHolder类,从而实例化Singleton对象。
单例默认 java实现
Java中的单例模式可以通过以下方式实现:
1. 饿汉式单例模式:在类加载时就创建对象实例,线程安全。示例代码如下:
```java
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
```
2. 懒汉式单例模式:在第一次调用getInstance()方法时才创建对象实例,线程不安全。示例代码如下:
```java
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
3. 双重检查锁单例模式:在懒汉式的基础上增加了同步锁,保证线程安全。示例代码如下:
```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;
}
}
```
需要注意的是,以上三种方式都可以实现单例模式,但饿汉式单例模式由于在类加载时就创建对象实例,可能会浪费一定的内存空间;懒汉式单例模式则存在线程不安全的问题;双重检查锁单例模式解决了线程安全问题,但在某些情况下可能会出现问题,因此需要谨慎使用。同时,还有其他方式实现单例模式,比如使用枚举、静态内部类等方式。
阅读全文