来看关于Java单例对象同步成绩
net程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net比。java程序员都是代码完成的,所以java程序员常戏称.net程序员是操作员,呵呵。单例对象(Singleton)是一种经常使用的计划形式。在Java使用中,单例对象能包管在一个JVM中,该对象只要一个实例存在。恰是因为这个特性,单例对象一般作为程序中的寄存设置信息的载体,由于它能包管其他对象读到分歧的信息。比方在某个服务器程序中,该服务器的设置信息大概寄存在数据库或文件中,这些设置数据由某个单例对象一致读取,服务历程中的其他对象假如要猎取这些设置信息,只需会见该单例对象便可。这类体例极年夜地简化了在庞大情况下,特别是多线程情况下的设置办理,可是跟着使用场景的分歧,也大概带来一些同步成绩。
本文将切磋一下在多线程情况下,利用单例对象作设置信息办理时大概会带来的几个同步成绩,并针对每一个成绩给出可选的办理举措。
成绩形貌
在多线程情况下,单例对象的同步成绩次要表现在两个方面,单例对象的初始化和单例对象的属性更新。
本文形貌的办法有以下假定:
1.单例对象的属性(或成员变量)的猎取,是经由过程单例对象的初始化完成的。也就是说,在单例对象初始化时,会从文件或数据库中读取最新的设置信息。
2.其他对象不克不及间接改动单例对象的属性,单例对象属性的变更来历于设置文件或设置数据库数据的变更。
1.1单例对象的初始化
起首,会商一下单例对象的初始化同步。单例形式的一般处置体例是,在对象中有一个静态成员变量,其范例就是单例范例自己;假如该变量为null,则创立该单例范例的对象,并将该变量指向这个对象;假如该变量不为null,则间接利用该变量。
其历程以下面代码所示:
publicclassGlobalConfig{
privatestaticGlobalConfiginstance=null;
privateVectorproperties=null;
privateGlobalConfig(){
//LoadconfigurationinformationfromDBorfile
//Setvaluesforproperties
}
publicstaticGlobalConfiggetInstance(){
if(instance==null){
instance=newGlobalConfig();
}
returninstance;
}
publicVectorgetProperties(){
returnproperties;
}
}
这类处置体例在单线程的形式下能够很好的运转;可是在多线程形式下,大概发生成绩。假如第一个线程发明成员变量为null,筹办创立对象;这是第二个线程同时也发明成员变量为null,也会创立新对象。这就会形成在一个JVM中有多个单例范例的实例。假如这个单例范例的成员变量在运转过程当中变更,会形成多个单例范例实例的纷歧致,发生一些很奇异的征象。比方,某服务历程经由过程反省单例对象的某个属性来中断多个线程服务,假如存在多个单例对象的实例,就会形成部分线程服务中断,部分线程服务不克不及中断的情形。
<p>
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在Java1.5版本中,Java又引入了泛型编程(GenericProgramming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 是一种使网页(Web Page)产生生动活泼画面的语言 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 是一种将安全性(Security)列为第一优先考虑的语言 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
页:
[1]