单例设计模式:一种有两种:懒汉式和饿汉式。
示例:
//单例设计模式 //恶汉式 class Single{ private static final Single s=new Single(); private Single(){} public static Single getInstance(){ return s ; } } //懒汉式也被称为延迟加载 class Single1{ private static Single1 s= null; private Single1(){} public static Single1 getInstance(){ if(s ==null) //---->A----->B多线程访问 s= new Single1();//延迟加载 return s ; } } *****如果有多线程对共享数据S进行访问,就会出现安全隐患。
------------------------》加同步解决安全问题。----------------------------------
1)同步函数
//懒汉式 class Single1{ private static Single1 s =null; private Single1(){} public static synchronized Single1 getInstance(){//效率低-->同步代码块 if(s ==null) s= new Single1(); return s ; } } 如果是多线程,为了获得实例,进来的时候都要进行同步锁的判断,就比较低效。因此,懒汉式的方法比较低效。
2)同步代码块
//懒汉式 class Single1{ private static Single1 s =null; private Single1(){} public static synchronized Single1 getInstance(){//效率低-->同步代码块 if(s ==null){ synchronized(Single1.class ){//对象是:该类所属字节码文件的class if(s ==null) s= new Single1(); } } return s ; } } 用双重判断解决低效,提高了懒汉式的效率
**************所以使用的时候,选择饿汉式比较方便,比好好。***************
|