public static Singleton getInstance(){
if(instance==null){//可能出现的情况:线程A进入,判断非null,判断完之后,还没有等到执行 instance=new Singleton()语句,
//执行权就到线程B,然后B进入,判断非null,执行 instance=new Singleton(),过一段时间
//线程A夺回执行权,也执行 instance=new Singleton(),就导致创建的 instance不唯一
instance=new Singleton();
}
return instance;
}
这是我的学习心得,当日记写的,分享下:
/*该懒汉式的缺点是:程序每次访问的时候都要判断一次锁,十分浪费资源,使程序低效*/ class Single{ private static Single s = null; private Single(){} public static synchronized Single getInstance(){ if(s == null) s = new Single(); return s; } }
//下面懒汉式提高效率 class Single1{ private static Single1 s = null; private Single1(){} //利用双重循环来判断,提高了效率 public static Single1 getInstance(){ if(s ==null){ synchronized(Single1.class){ if(s==null){ s = new Single1(); } } } return s; } } |