Java 单例模式探讨

Java 单例模式探讨

ID:40199674

大小:154.50 KB

页数:16页

时间:2019-07-25

Java 单例模式探讨_第1页
Java 单例模式探讨_第2页
Java 单例模式探讨_第3页
Java 单例模式探讨_第4页
Java 单例模式探讨_第5页
资源描述:

《Java 单例模式探讨》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java单例模式探讨分类:架构和设计模式2010-08-0411:31转自:CSDN博客--it_man的专栏单例模式实现方式:1.预先加载法(饿汉式)Java代码1classS1{2privateS1(){3System.out.println("ok1");4}567privatestaticS1instance=newS1();89publicstaticS1getInstance(){10returninstance;11}12}[java]viewplaincopy13classS1{14privateS1()

2、{15System.out.println("ok1");16}171819privatestaticS1instance=newS1();12publicstaticS1getInstance(){3returninstance;4}5}优点:1.线程安全的2.在类加载的同时已经创建好一个静态对象,调用时反应速度快。缺点:资源利用效率不高,可能getInstance永远不会执行到,但是执行了该类的其他静态方法或者加载了该类(反射)(class.forName),那么这个实例仍然初始化了2.initializationo

3、ndemand,延迟加载法(懒汉式,考虑多线程)Java代码6classS2{7privateS2(){8System.out.println("ok2");9}1011privatestaticS2instance=null;1213publicstaticsynchronizedS2getInstance(){14if(instance==null)instance=newS2();15returninstance;1}2}[java]viewplaincopy3classS2{4privateS2(){5Syste

4、m.out.println("ok2");6}78privatestaticS2instance=null;910publicstaticsynchronizedS2getInstance(){11if(instance==null)instance=newS2();12returninstance;13}14}优点:资源利用率高,不执行getInstance就不会被实例,可以执行该类其他静态方法。缺点:第一次加载时发应不快,多线程使用不必要的同步开销大3.initializationondemanddoublechec

5、k双重检测(考虑多线程)Java代码15classS3{16privateS3(){17System.out.println("ok3");18}191privatestaticS3instance=null;23publicstaticS3getInstance(){4if(instance==null){5synchronized(S3.class){6if(instance==null)7instance=newS3();8}9}10returninstance;11}12}[java]viewplaincopy1

6、3classS3{14privateS3(){15System.out.println("ok3");16}1718privatestaticS3instance=null;1920publicstaticS3getInstance(){21if(instance==null){22synchronized(S3.class){23if(instance==null)24instance=newS3();25}26}27returninstance;28}29}优点:资源利用率高,不执行getInstance就不会被实例

7、,可以执行该类其他静态方法。缺点:第一次加载时发应不快,由于java内存模型一些原因偶尔会失败4.initializationondemandholder(考虑多线程)Java代码1classS4{2privateS4(){3System.out.println("ok4");4}56privatestaticclassS4Holder{7staticS4instance=newS4();8}91011publicstaticS4getInstance(){12returnS4Holder.instance;13}14}

8、[java]viewplaincopy15classS4{16privateS4(){17System.out.println("ok4");18}1920privatestaticclassS4Holder{21staticS4instance=newS4();22}232425publicstaticS4getI

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。