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. Round Numbers

    转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301472836 大致题意: 输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少 ...

  2. python 站点爬虫 下载在线盗墓笔记小说到本地的脚本

    近期闲着没事想看小说,找到一个全是南派三叔的小说的站点,决定都下载下来看看,于是动手,在非常多QQ群里高手的帮助下(本人正則表達式非常烂.程序复杂的正则都是一些高手指导的),花了三四天写了一个脚本 须 ...

  3. ABAP 常用FUNCTION集锦(转)

    此文章从网上抄摘,目的用于自己记录 DYNP_VALUES_READ – 读取SCREEN字段的值,也可以用来读取报表SELECTION SCREEN. DYNP_VALUES_UPDATE – 更新 ...

  4. HBASE完全分布式模式的安装

    1集群环境下hadoop.1.1.2已经安装成功 2配置hosts,及环境变量 3编辑hbase-env.xml 4编辑hbase-site.xml 5编辑regionservers文件 6把Hbas ...

  5. Swift - 让StoryBoard设计视图,程序运行时都使用横屏形式

    1,运行时横屏 将项目属性“General”->“DeviceOritentation”的Portrait复选框去掉 2,storyboard设计视图横屏 在storyboard中,单击中间界面 ...

  6. javascript中外部js文件取得自身完整路径得办法

    原文:javascript中外部js文件取得自身完整路径得办法 有时候我们需要引入一个外部js文件,这个js文件又需要用到自己的路径或者是所在的目录,别问怎么又这么变态的需求,开发做久了各种奇葩需求也 ...

  7. jquery easyui Accordion的使用

    <html> <head> <script src="jquery-easyui/jquery.min.js"></script> ...

  8. Error: 17053 LogWriter: Operating system error 21(The device is not ready.)

    今天在Detach数据库的时候出现错误,运行DBCC CHECKDB从SQL Server error log中看到下面的信息: Error: 17053, Severity: 16, State: ...

  9. java jquery 函数多參数传递

    业务需求: 名次   伙伴 业绩 签单 面谈 每日目标 1 文彬 5100 6 10 查看目标 2 马红月 4550 4 6 查看目标 3 王刚 4100 3 9 查看目标 4 郭亚凯 3450 4 ...

  10. 解决sdk manager无法更新的问题

    我是在mac下安装了android studio,没有sdk manager,于是下了单独的sdk manager,勾选了想要下载的内容,但总是出现"nothing installed&qu ...