有错请指出
单实例模式:
一个类只能有一个实例对象
例如:计算机可以有多个打印作业,但是只能有一个正在打印
package test; /* * 这个是先初始化对象。 * 称为:饿汉式 * class Single { private Single() { } private static Single s = new Single(); public static Single getInstance() { return s; } } * * * */ //开发时多用饿汉式 // 对象是方法被调用时,才初始化,也叫做对象的延时加载,称为:懒汉式 //Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象 //加synchronized是为了避免单实例对象在内存中可能加载多个对象,但是效率低下 //或者如下 //最终还是饿汉式更加实用; class Single2{ private static Single2 s=null; private Single2(){}; /*
方法一
public static synchronized Single2 getInstance(){
if(s==null) s=new Single2(); return s; }*/
/*方法二*/
public static Single2 getInstance(){ if(s==null){ synchronized(Single.class){ if(s==null) s=new Single2(); } } return s; } } //定义单例时建议使用饿汉式
如果不加synchronized,在多线程时可能出现创建多个实例的情况分析
加了synchronized之后
a线程就算判断完之后等在了if之后,b线程也进不去if判断,a线程独占第二个if判断(针对方法二)
-------------------------By 仔鸡