2018-04-19 13:35:04 464浏览
单例模式是最常用的设计模式之一,目的是保证一个类只有一个实例。
在项目中的作用:
classHunger{ //静态的实例 privatestaticHungerhunger=newHunger(); //隐藏构造方法 privateHunger(){} //返回静态实例 publicstaticHungergetInstance(){ returnhunger; } }
publicclassLazySingleton{ //静态的实例 privatestaticLazySingletonsingle=null; //隐藏构造方法 privateLazySingleton(){ System.out.println("创建LazySingleton对象"); } //返回静态实例 publicstaticLazySingletongetInstance(){ if(single==null){ single=newLazySingleton(); } returnsingle; } }
for(inti=0;i<100;i++){ newThread(newRunnable(){ @Override publicvoidrun(){ System.out.println(LazySingleton.getInstance()); }}).start(); }
publicstaticsynchronizedLazySingletongetInstance(){ if(single==null){ single=newLazySingleton(); } returnsingle; }执行刚才多线程的代码后,我们发现可以解决同步问题,但是同步方法存在的问题是每个线程进入后都会加锁,执行效率低。
publicstaticLazySingletongetInstance(){ if(single==null){ synchronized(LazySingleton.class){ single=newLazySingleton(); } } returnsingle; }
publicstaticLazySingletongetInstance(){ //外层的if主要作用是判断是否需要执行同步块,提高性能 if(single==null){ //静态方法中将类作为锁 synchronized(LazySingleton.class){ //判断对象是否为空,为空就创建对象 if(single==null){ single=newLazySingleton(); } } } returnsingle; }
classMySingleton{ privateMySingleton(){ } privatestaticclassSingletonHelp{ staticMySingletoninstance=newMySingleton(); } publicstaticMySingletongetInstance(){ returnSingletonHelp.instance; } }
【关注微信公众号获取更多学习资料】