public class Singleton {
public static void main(String[] args) throws Exception {
System.out.println(Class.forName("S1"));
System.out.println(Class.forName("S2"));
System.out.println(Class.forName("S3"));
System.out.println(Class.forName("S4"));
}
} /*
* 预先加载法
* 优点:1.线程安全的, 2.在类加载的同时已经创建好一个静态对象,调用时反应速度快。
* 缺点: 资源利用效率不高,可能这个单例不会需要使用也被系统加载
* (资源利用效率不高,可能getInstance永远不会执行到,但是执行了该类的其他静态方法
* 或者加载了该类(class.forName),那么这个实例仍然初始化了)
*/
class S1 {
private S1() {
System.out.println("ok1");
} private static S1 instance = new S1(); public static S1 getInstance() {
return instance;
}
} /*
* initialization on demand,延迟加载法 (考虑多线程)
* 优点:1.资源利用率高
* 缺点:第一次加载是发应不快,多线程使用不必要的同步开销大
*/
class S2 {
private S2() {
System.out.println("ok2");
} private static S2 instance = null; public static synchronized S2 getInstance() {
if (instance == null)
instance = new S2();
return instance;
}
} /*
* initialization on demand - double check 延迟加载法改进之双重检测 (考虑多线程)
* 优点:1.资源利用率高
* 缺点:第一次加载是发应不快 ,由于java 内存模型一些原因偶尔会失败
*/
class S3 {
private S3() {
System.out.println("ok3");
} private static S3 instance = null; public static S3 getInstance() {
if (instance == null) {
synchronized (S3.class) {
if (instance == null)
instance = new S3();
}
}
return instance;
}
} /*
* initialization on demand holder (考虑多线程)
* 优点:1.资源利用率高 缺点:第一次加载是发应不快
*/
class S4 {
private S4() {
System.out.println("ok4");
} private static class S4Holder {
static S4 instance = new S4();
} public static S4 getInstance() {
return S4Holder.instance;
}
}

java设计模式_单例的更多相关文章

  1. Java设计模式之单例

    一.Java中的单例: 特点: ① 单例类只有一个实例 ② 单例类必须自己创建自己唯一实例 ③ 单例类必须给所有其他对象提供这一实例 二.两种模式: ①懒汉式单例<线程不安全> 在类加载时 ...

  2. Java面向对象_单例设计模式

    单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当 ...

  3. [译]Java 设计模式之单例

    (文章翻译自Java Design Pattern: Singleton) 单例是在Java最经常被用到的设计模式.它通过阻止其他的实例化和修改来用于控制创建对象的数目.这一特性可应用于那些当只有一个 ...

  4. java设计模式之单例设计模式

    单例设计模式 保证一个类在使用过程中,只有一个实例.优势就是他的作用,这个类永远只有一个实例. 优势:这个类永远只有一个实例,占用内存少,有利于Java垃圾回收. 单例设计模式关键点 私有的构造方法. ...

  5. Java设计模式之 — 单例(Singleton)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8860649 写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上 ...

  6. JAVA设计模式:单例设计

    1.单例设计Singleton的引出 单例设计,从名字上首先可以看出单---即只有一个,例---只的是实例化对象:那么单例也就是说一个类,只产生了一个实例化对象.但是我们都知道,一个类要产生实例化对象 ...

  7. java设计模式之单例设计模式和多例设计模式

    单例设计模式:构造方法私有化,在类的内部定义static属性和方法,利用static方法来取得本类的实例化对象:无论外部产生多少个实例化对象,本质上只有一个实例化对象 饿汉式单例设计 class Si ...

  8. Java设计模式之单例设计模式 入门实例

    一.基础概念 (1).单例设计模式:保证一个类在内存中的对象唯一性. (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作.一个程序要基于另一个程序操作后的结果进行操 ...

  9. Java设计模式之单例设计模式总结

    package singleton; /**单例设计模式 饿汉式 * * @author gx *这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化, ...

随机推荐

  1. libcurl编程,整整17篇

    http://www.cnblogs.com/lidabo/category/639633.html

  2. mysql基础:列类型--整型

    mysql列类型--字符串  http://blog.csdn.net/jk110333/article/details/9342301 mysql列类型--时间和日期    http://blog. ...

  3. 选择屏幕中的下拉框和dialog中下拉框设计

    REPORT  YTEST014. PARAMETERS: auart LIKE vapma-auart  AS LISTBOX   VISIBLE LENGTH 6. AT SELECTION-SC ...

  4. 导航条——flash导航条

    1.概述 在一些个性网站中,网站导航的首选就是flash导航条,flash导航条可以给浏览者带来更好的视觉效果,是网站个性的主要体现之一. 2.技术要点 主要应用Flash动作脚本中的Button类的 ...

  5. 让XP系统支持GPT硬盘

    转自 http://article.pchome.net/content-1324506-all.html 1XP系统还不过时 教你完美征服3TB硬盘回顶部 原作者:沈洁 随着高清1080p片源的普及 ...

  6. 在使用supervisord 管理tomcat时遇到的小问题

    使用 supervisord  监控管理的进程必须以 nodaemon 启动,而 tomcat 的 startup.sh 脚本是daemon方式的,假设不做改动的话,supervisord 会一直报错 ...

  7. 马航MH17事件将把普京逼入绝境?

    据7月22日报道,马克兰东部民间武装22日凌晨将失事客机的"黑匣子"交给马来西亚方面.乌政府与民间武装允许在坠机地点附的小范围停火. 与此同一时候,联合国安理会21日通过决议,敦促 ...

  8. protobuf-2.5.0.tar.gz的下载与安装

    1.下载 hadoop使用protocol buffer进行通信,须要下载和安装protobuf-2.5.0.tar.gz.因为如今protobuf-2.5.0.tar.gz已经无法在官网https: ...

  9. Delphi调用C++导出的QT类

    打开VS2008创建一个dll项目(创建了一个QT Library项目),新建头文件q4dapplication.h定义纯虚类: #ifndef Q4DAPPLICATION#define Q4DAP ...

  10. SQL中EXISTS的用法(转)

    比如在Northwind数据库中有一个查询为SELECT c.CustomerId,CompanyName FROM Customers cWHERE EXISTS(SELECT OrderID FR ...