希赛考试网
首页 > 软考 > 软件设计师

java单例模式懒汉和饿汉

希赛网 2024-06-15 14:31:31

单例模式在Java开发中比较常见,它是一种设计模式,只允许创建一个实例对象,保证所有对该对象的访问都通过同一个实例。在实际开发中,单例模式可以用来管理全局变量、线程池、数据库连接池等资源,提高程序性能和稳定性。从不同的角度来看,单例模式有懒汉和饿汉两种实现方式。

懒汉模式

懒汉模式是指在需要使用实例对象时才进行创建,而不是在程序启动时就创建实例。这样做的好处是能够避免资源浪费,提高程序的性能。

懒汉模式实现的方式有多种,最简单的方式是只在第一次调用getInstance()时创建实例,如下所示:

```

public class LazySingleton {

private static LazySingleton instance;

private LazySingleton() {}

public static synchronized LazySingleton getInstance() {

if (instance == null) {

instance = new LazySingleton();

}

return instance;

}

}

```

这种实现方式虽然简单,但是存在线程安全性问题。当有多个线程同时调用getInstance()时,可能会导致多个实例被创建,从而违反了单例模式的原则。为了解决这个问题,可以使用双重检查锁定的方式,如下所示:

```

public class LazySingleton {

private static volatile LazySingleton instance;

private LazySingleton() {}

public static LazySingleton getInstance() {

if (instance == null) {

synchronized (LazySingleton.class) {

if (instance == null) {

instance = new LazySingleton();

}

}

}

return instance;

}

}

```

饿汉模式

饿汉模式是指在程序启动时就创建实例对象,而不需要在使用时再进行创建。这样做的好处是能够避免线程安全性问题,提高程序的稳定性。

饿汉模式的实现方式比较简单,如下所示:

```

public class HungrySingleton {

private static HungrySingleton instance = new HungrySingleton();

private HungrySingleton() {}

public static HungrySingleton getInstance() {

return instance;

}

}

```

这种实现方式虽然避免了线程安全性问题,但是可能会存在资源浪费的问题。如果这个实例对象很大或者创建它需要很长时间,那么在程序启动时就创建它可能会导致程序的启动变慢。

比较

懒汉模式和饿汉模式各有优缺点,在实际开发中需要根据实际需求来选择合适的方式。下面是它们的比较。

1. 线程安全性

懒汉模式需要考虑线程安全性问题,否则可能会导致多个实例被创建。而饿汉模式则不存在这个问题,因为实例已经在程序启动时被创建。

2. 程序性能

在懒汉模式中,实例对象只在第一次使用时被创建,避免了资源浪费,提高了程序的性能。而在饿汉模式中,实例对象在程序启动时就被创建,可能会导致程序启动变慢,影响程序的性能。

3. 代码复杂度

为了保证懒汉模式的线程安全性,需要使用线程同步的方式,增加了代码的复杂度。而饿汉模式相对简单,没有这个问题。

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件