欢迎来到天天文库
浏览记录
ID:40313941
大小:52.00 KB
页数:5页
时间:2019-07-30
《java单例模式详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Java单例模式详解概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 单例模式有一下特点: 1、单例类只能有一个实例。 2、单例类必须自己自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个PrinterSpoo
2、ler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。首先看一个经典的单例实现。publicclassSingleton{ privatestaticSingletonuniqueInstance=null; privateSingleton(){ //Existsonlytodefeatinstantiation. } publicstaticSinglet
3、ongetInstance(){ if(uniqueInstance==null){ uniqueInstance=newSingleton(); } returnuniqueInstance; } //Othermethods...}Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。(事实上,通过Java反射机制是能够实例化构造方法为private的类的,那基本
4、上会使所有的Java单例实现失效。此问题在此处不做讨论,姑且掩耳盗铃地认为反射机制不存在。)但是以上实现没有考虑线程安全问题。所谓线程安全是指:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。显然以上实现并不满足线程安全的要求,在并发环境下很可能出现多个Single
5、ton实例。1publicclassTestStream{2privateStringname;3publicStringgetName(){4returnname;5}6publicvoidsetName(Stringname){7this.name=name;8}9//该类只能有一个实例10privateTestStream(){}//私有无参构造方法11//该类必须自行创建12//有2种方式13/*privatestaticfinalTestStreamts=newTestStream();*/14privatestaticTes
6、tStreamts1=null;15//这个类必须自动向整个系统提供这个实例对象16publicstaticTestStreamgetTest(){17if(ts1==null){18ts1=newTestStream();19}20returnts1;21}22publicvoidgetInfo(){23System.out.println("outputmessage"+name);24}25}1publicclassTestMain{2publicstaticvoidmain(String[]args){3TestStreams=
7、TestStream.getTest();4s.setName("张孝祥");5System.out.println(s.getName());6TestStreams1=TestStream.getTest();7s1.setName("张孝祥");8System.out.println(s1.getName());9s.getInfo();10s1.getInfo();11if(s==s1){12System.out.println("创建的是同一个实例");13}elseif(s!=s1){14System.out.println
8、("创建的不是同一个实例");15}else{16System.out.println("applicationerror");17}18}19}运行结果: 张孝祥 张孝祥 outputmessage
此文档下载收益归作者所有