当我们在编写Java程序时,可能会需要某些类在整个程序运行周期内只能有一个实例被创建。这个时候,就可以采用单例(Singleton)模式。
单例模式是一种创建型设计模式。在单例模式中,一个类只允许有一个实例,而且该实例易于被外界访问。在很多情况下,对象如果被实例化多次可能会产生不必要的开销,如资源消耗、多次处理等。因此使用单例模式可以避免这种情况的产生。
下面是几种不同的Java单例模式实现方式:
1. 饿汉模式
饿汉模式在类加载的时候就创建了一个实例对象,因此存在一定的内存浪费风险。一般适用于实例对象较小,不会对系统性能产生太大影响的场景。
示例代码如下:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
2. 懒汉模式(线程不安全)
懒汉模式是指在需要使用时才创建单例实例对象。但是,在多线程的情况下可能会出现多个线程同时调用 getInstance()
方法从而创建多个实例的问题。因此,该实现方式线程不安全。
示例代码如下:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
3. 懒汉模式(线程安全)
为了解决懒汉模式线程不安全的问题,我们可以通过在 getInstance()
方法前添加 synchronized
关键字来实现线程安全。但是,这种实现方式可能会影响系统性能,在高并发场景下使用需要谨慎。
示例代码如下:
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单例模式了吗? - Python技术站