- 浏览: 1233450 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
小弟最近想学习java的设计模式,就从单例模式来学起吧。大家知道在java语言中,可以利用static 关键字来构建单例模式,主要是因为static 这个关键字在所在的类在被java虚拟机装载的时候,变量是最先被装载(如果有多个,那么按照从上往下的顺序执行的),并且是全局共享的。
因此:按照这个理解:我写了一个单例模式。代码如下:
public class Test{
private static
Test test=null;
public static
Test getInstence(){
if(test==null)
{
test=mew Test();
}
return test;
}
}
在这个方法里,我申明了一个private static类型的成员变量,然后申明了一个static类型的方法,判断test如果是null,则实例化,然后返回Test类的一个实例。应为static类型的变量是全局共享的,所以,一旦test被实例化,那么则被存放到java虚拟机的堆中,全局共享,以后不会在实例化。直到类的生命周期结束然后才会被销毁。在别的类要引用的时候,只需要Test.getInstence()就可以获得一个实例。这就是我理解的单利模式。
但我在网上看了另一种写法,说要有一个私有的构造函数,代码是这样的。
public class Test{
private Test(){}
private static Test test=new Test();
public static
Test getInstence(){
return test;
}
}
我是这样理解这个类的:
1 private static Test test=new Test();在jvm 装载这个类的时候会初始化这个声明,Test类的实例test已经被实例化。并且全局共享。
2
public static
Test getInstence(){ }
static的方法getInstence用来返回Test 类的实例。这个实例就是上面已经实例化的那个(唯一的一个)
问题一:问题是私有的构造函数,我不明白为什么一定要有个私有的构造函数?大家帮 忙看看! 问题二:在开发单例模式中有那些是需要注意的地方?比如构造方法之类的要注意什 么?
问题三:单利模式有几种形式?能不能给个例子?听说有懒汉式什么的?
问题四:什么时候需要用到单例模式?
请大家不宁赐教!多谢!我的邮箱lifeneedyou@163.com
,可以发邮件给我!
return test;
评论
sorry 这里应该是个对象
synchronized(ob){
...
}
if(XXX==null){
synchronized(this){
XXX = new XXX();
}
}
return XXX;
}
Head First设计模式上的
谢谢!synchronized(this),这里的this具体怎么解释?
this 代表的是 XXX.class
晕 this是实例 XXX.class 是static类型 怎么可能相同
if(XXX==null){
synchronized(this){
XXX = new XXX();
}
}
return XXX;
}
Head First设计模式上的
谢谢!synchronized(this),这里的this具体怎么解释?
this 代表的是 XXX.class
private static final UserService userService = new UserService ();
private UserService{
}
public static UserService getInstance(){
return userService;
}
}
这个是懒汉式吧。。
采用的是预先加载的方式,UserService.class 当被载入的时候 就事先声明了对象;
问题一:声明私有的构造函数,是为了防止被其他类调用,否则的话,单例就不成立了。
问题二:开发单例的时候,主要是注意线程安全,即要保证在多线程运行的情况下,也不会发生线程同时访问一个变量的情况,所以,一般可以考虑为方法加"sychronized".
问题三:单例模式我知道的有懒汉式,和饱汉式。
问题四:这个还没有完全理解。
if(singleton == null){
synchronized(this){
if(singlenton == null){
singlenton = new Singlenton();
}
}
}
return singleton;
}
-----------------------------
这个性能比在外面加synchronized好多了
太精辟了
这个程序编译得过去吗? 应该改成synchronized(Singlenton.class)
if(singleton == null){
synchronized(this){
if(singlenton == null){
singlenton = new Singlenton();
}
}
}
return singleton;
}
-----------------------------
这个性能比在外面加synchronized好多了
太精辟了
给本类的class描述对象加锁我觉得最简单有效
搂住请见设计模式一书。
你的措词就有问题, 怎么可能是“程序”,汗
不过我觉得有问题
不是
synchronized(Class.yourClass){
...
}
么?????
括号内的可以是任何对象,包括String,Class对象,你自己声明个object也没有问题,前提是该对象锁能确保不被其他线程所持有
不是,我的意思是你有看到他的方法是static么?
static是在JVM加载的时候就加载到静态去了
而这里的this的语义是"对象".
所以这里应该锁的是“类” 而非“对象”
所以我认为这里不应该是this.
给本类的class描述对象加锁我觉得最简单有效
搂住请见设计模式一书。
public class SingletonFactory {
private static SingletonFactory factory;
private static Object classclick = SingletonFactory.class;
private SingletonFactory() {
}
public static SingletonFactory newInstance() {
synchronized (classclick) {
if (factory == null)
factory = new SingletonFactory();
}
return factory;
}
}
不过我觉得有问题
不是
synchronized(Class.yourClass){
...
}
么?????
括号内的可以是任何对象,包括String,Class对象,你自己声明个object也没有问题,前提是该对象锁能确保不被其他线程所持有
谢谢!synchronized(this),这里的this具体怎么解释?
对象锁,对象锁被某个线程拿到后,其他的线程不能访问该资源,直到该对象锁被释放,也可以叫同步锁。
不过我觉得有问题
不是
synchronized(Class.yourClass){
...
}
么?????
if(XXX==null){
synchronized(this){
XXX = new XXX();
}
}
return XXX;
}
Head First设计模式上的
谢谢!synchronized(this),这里的this具体怎么解释?
if(XXX==null){
synchronized(this){
XXX = new XXX();
}
}
return XXX;
}
Head First设计模式上的
单例模式的写法有很多吧,最简洁的才是最好的。
一个实例,虽然节约资源,缺点应该也很明显。就好比,厕所小便槽就一个,大家要排队等候。
兄台,您这个比喻好像不对吧..单例又不是单线程!
[b]所有线程都共享一个资源
一个线程共享所有资源[/b]
要是“资源”是马桶,排队的就是“线程”。
兄台为什么认为那位兄台比喻不对呢??
我同意 "所有线程都共享一个资源"这个观点, 我不认可的是 拿到"单例对象"后的其他操作的时候,不应该是排队等待,应该是竞争,当然这个操作是在没有加锁的情况下.
发表评论
-
java 装饰器模式
2010-01-08 11:07 22534记得以前听一个高手说java.io包采用了了装饰器模式, ... -
Java 观察者模式observer
2009-12-31 15:03 1844观察者模式:顾名思义就是有个人在观察着一些东西,一旦这 ... -
java策略模式
2009-12-31 13:58 3044head first对策略模式的定义是:封装一系列 ... -
Java简单工厂模式
2009-12-31 11:19 1607package pattern.factory; pub ... -
java 代理模式detegate
2009-12-31 11:06 1656我对代理模式的理解是:一个人本该他去做的事情,他 ...
相关推荐
Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式...
java Singleton单例模式 java Singleton单例模式
一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。
实用Java的单例模式,实用于Java学习者 单例模式 单例模式
Java实现单例模式[汇编].pdf
Java设计模式-单例模式(懒汉和恶汉)
Java 单例模式 懒汉模式 //懒汉式 多线程中不可以保证是一个对象
java 单例模式
作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类譬如每台计算机可以有若干个打印机,但只能有一个Printer,以避免两个打印作业同时输出到打印机...
作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 PPT详细了单例模式的实现和使用场景
java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂
通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包...
通过Java语言,主要实现了六种单例的生成方法,包括懒汉式、饿汉式、双重校验锁、枚举、静态内部类,可以根据实际情况选择使用
Java单例模式,其中:单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种
java单例模式的例子java单例模式的例子java单例模式的例子
java之单例模式
目录 单例模式的概念 单例模式的要点 单例模式类图 单例模式归类 单例模式的应用场景 单例模式解决的问题 单例模式的实现方式 单例模式实现方式对比 单例模式的概念 单例模式,顾名思义就是只有一个实例,并且由它...
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
主要介绍了你真的了解java单例模式了吗?实际上单例模式有着好几个变种,并且多线程中涉及到线程安全问题,,需要的朋友可以参考下