饿汉式代码举例
public static void main(String[] args) {
Bank instance = Bank.Instance();
Bank instance1 = Bank.Instance();
System.out.println(instance == instance1);// true 证明是一个实例
}
class Bank{
// 私有化这个类,保证外部无法调用
private Bank(){}
// 创建一个静态对象
private static Bank bank = new Bank();
// 声明一个public方法,以供外部调用
public static Bank Instance(){
return bank;
}
}
懒汉式代码举例
public static void main(String[] args) {
Bank instance = Bank.Instance();
Bank instance1 = Bank.Instance();
System.out.println(instance == instance1);// true 证明是一个实例
}
class Bank{
// 私有化这个类,保证外部无法调用
private Bank(){}
// 创建一个静态对象
private static Bank bank = null;
// 声明一个public方法,以供外部调用
public static Bank Instance(){
if (bank == null) {
bank = new Bank();
}
return bank;
}
}
懒汉式和饿汉式的区别
其中最明显的区别是懒汉式是调用时创建对象,饿汉式是加载时创建对象
饿汉式:
坏处:加载时间太长
好处:线程安全
懒汉式:
坏处:存在线程不安全问题
好处:延迟对象的创建(调用时再创建)
单例模式的优点
由于单例模式只生成一个实例,减少了系统性能的开销,当一个对象的产生需要比较多的资源时,如读取配置,产生其他依赖对象,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。