Java 单例模式【懒汉与饿汉】
程序员文章站
2022-07-14 09:39:38
...
最近在看点算法的东西,有点收获就记录一下。
单例模式的概念学过面向对象的应该都清楚,这里就不赘述了。需要记录一下的是单例模式的两种写法:懒汉模式和饿汉模式
这两者的概念看名字其实有点难理解,但是仔细想想很贴切,我用自己的语言通俗一点解释一下,可能并不能严谨的定义,但是有助于理解——
懒汉模式:即什么时候需要用到这个类的对象,就什么时候去实例化,不用到就永远都不实例化。
饿汉模式:即一开始实例化好,用不用再说,反正先准备好。
看代码来对比区别:
/**
* 懒汉写法(最常见。获取实例相对慢,但是加载类相对快)
*/
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
/**
* 饿汉写法(比较少见。获取实例相对快,但是加载类相对慢)
*/
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
上述懒汉模式的写法存在线程不安全的问题,即当多个线程调用这个单例的时候,可能会出现重复创建实例的现象,可以通过以下方式来解决:
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
多数情况下,不需要这样进行同步处理,因为这样做代码的效率会变低,不需要特殊考虑多线程的情况则不要这样去做。
以上是一点学习心得,感谢阅读!