单例模式
核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点
单例模式的优点:由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决
常见的五种单例模式实现方式:• 饿汉式(线程安全,调用效率高。 但是,不能延时加载。)
• 懒汉式(线程安全,调用效率不高。 但是,可以延时加载。)
饿汉式
package cn.dym;
/**
* 测试饿汉式单例模式
* @author Administrator
*
*/
public class SingletonDemo01 {
//类初始化时,立即加载这个对象 (没有延时加载的优势) // 加载类时,天然的是线程安全
private static SingletonDemo01 instance=new SingletonDemo01();
private SingletonDemo01() {
}
//方法没有同步,调用效率高
public static SingletonDemo01 getInstance() {
return instance;
}
}
懒汉式:资源利用率高了。但是,每次调用getInstance()方法都要同步,并发效率较低
package cn.dym;
/**
* 测试懒汉式单例模式
* @author Administrator
*
*/
public class SingletonDemo02 {
//类初始化时,不初始化这个对象 (延时加载,真正用的时候在创建)
private static SingletonDemo02 instance;
private SingletonDemo02() { //私有化构造器
}
//方法同步,调用效率低
public static synchronized SingletonDemo02 getInstance() {
if(instance==null) {
instance=new SingletonDemo02();
}
return instance;
}
}