class MySingle{
// 饿汉式---立即加载
// private static MySingle single = new MySingle();
// 懒汉式----延时加载
private static MySingle single;
private MySingle() {
}
public synchronized static MySingle getInstance() {
if (single == null){
single = new MySingle();
System.out.println("创建对象");
}
return single;
}
}
单例模式关键点:
1.私有化构造方法,禁止外部直接实例化对象。
2.私有化对象引用,并用static修饰。
3.对外提供获取方法。
饿汉式和懒汉式优缺点:
饿汉式在类被加载时就会实例化对象,这个对象不一定被使用,可能造成资源空间的浪费。
懒汉式在方法被调用时才会被初始化,在多线程情况下会有线程安全问题,所以要在获取方法上加synchronized关键字。
饿汉式和懒汉式如何选择?
懒汉式的获取方法上加了synchronized关键字,所以执行效率更低,但是饿汉式可能会出现对象未被使用而造成资源浪费的情况。
所以如果这个单例对象使用频率很高那么就用饿汉式,反之若使用频率很低则使用懒汉式。