Singleton 模式要求一个类有且仅有一个实例,并提供一个全局访问点。

Singleton模式 是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责!

1.三种实现方式:饿汉式、懒汉式、IoDH,

a.饿汉式在类加载时就进行实例化,无需考虑线程的操作,却占用容器,浪费资源

b. 懒汉式 在静态方法中实例化,需要考虑多线程操作,需要加同步锁的状态

c IoDH  定义一个内部类初始化对象  既能延迟初始化,又能保证线程安全,最优单例模式实现方式

2.主要应用场景

windows 任务管理器、垃圾回收站、网页计数器、web配置初始化、数据源配置,线程池控制

3. 可能存在问题

java的垃圾回收机制对长时间不用的系统会进行自动回收,会造成单例模式的状态丢失

public class EagerSingleClass {
private final EagerSingleClass eager = new EagerSingleClass();

private EagerSingleClass() {

}
/**
* 饿汉式单例模式在类加载时就初始化,不必考虑线程 ,但会占用容器,从资源利用角效率来讲不如懒汉式
* * @author Yang Xue 2014年12月2日
* @return
*/
public EagerSingleClass getInstance(){
return eager;
}

public EagerSingleClass getINstanceClass(){
return GetEagerSingle.eagerSingleClass;
}

/**
* Initialization on Demand Holder (IoDH)
* @author wb-yangxue.yx
* 实现延迟加载,又可保证线程安全,最优单例模式
* @version $Id: EagerSingleClass.java, v 0.1 2014年12月2日 上午10:46:24 wb-yangxue.yx Exp $
*/
private static class GetEagerSingle{
private static final EagerSingleClass eagerSingleClass=new EagerSingleClass();
}
}

public class LazySingleClass {
private volatile static LazySingleClass singleClass;

private LazySingleClass() {

}
/**
* 懒汉式双重锁定 同步里判断是为了避免多线程操作,双重锁定变量前需加volatile,
* volatile 会屏蔽虚拟机内所做的一些列优化,导致系统运行效率降低
* @author Yang Xue 2014年12月2日
* @return
*/
public static LazySingleClass getInstall() {
if (singleClass == null) {
synchronized (LazySingleClass.class) {
if (singleClass == null) {
singleClass = new LazySingleClass();
}
}
}
return singleClass;
}
}

java单例模式实现方式的更多相关文章

  1. 深入Java单例模式(转)

    深入Java单例模式 源自 http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容 ...

  2. Java 单例模式的七种写法

    Java 单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Sin ...

  3. Java 单例模式探讨

    以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...

  4. 单例模式:Java单例模式的几种写法及它们的优缺点

    总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...

  5. 9种Java单例模式详解(推荐)

    单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象.  懒汉式(线程不安全) 其主要表现在单例类在外 ...

  6. Java——单例模式、多线程

    单例模式 单例模式练习 单例模式的分类 懒汉式 懒汉式相关练习 饿汉式 饿汉式相关练习 线程安全 使用双重检测机制实现线程安全的懒汉式 使用静态内部类实现线程安全的单例模式 多线程 多线程的三种方式 ...

  7. 用java单例模式实现面板切换

    1.首先介绍一下什么是单例模式: java单例模式是一种常见的设计模式,那么我们先看看懒汉模式: public class Singleton_ { //设为私有方法,防止被外部类引用或实例 priv ...

  8. Java 使用线程方式Thread和Runnable,以及Thread与Runnable的区别

    一. java中实现线程的方式有Thread和Runnable Thread: public class Thread1 extends Thread{ @Override public void r ...

  9. 【深入】java 单例模式(转)

    [深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便 ...

随机推荐

  1. eclipse重定向输入输出到文件

    最近在学习算法第四版,为了要用作者给的测试数据alg4-data,需要将数据直接导入到程序中.在作者的示例代码里用了重定向来做这个事情,但是在eclipse里使用重定向很不方便,查了很多资料,都说是在 ...

  2. CSS3新增属性

    1>RGBA透明度(红.绿.蓝.alpha透明度) 2>块阴影 box-shadow(标签).text-shadow(文字) 3>圆角阴影 border-radius 4>边框 ...

  3. 关于Microsoft CRM 2013自动保存Autosave功能的10点说明

    今天不经意翻看到以前记的笔记发现这个笔记觉得还是应该把它整理记录一下: 关于Microsoft CRM 2013自动保存Autosave功能的10点说明: 1.新建时不会自动保存,需要手动点击保存按钮 ...

  4. GitHub上最火的40个Android开源项目

    http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects

  5. python第二天-linux权限管理

    (1)linux登陆密码忘了,怎么办? 把系统重启,在进入系统之前不断的按键盘左上角的"Esc"键会进入这样一个画面,按键盘上的e进入编辑. 进入这个画面以后,通过键盘的上下方向键 ...

  6. java 截取url的参数

    /** * 去掉url中的路径,留下请求参数部分 * @param strURL url地址 * @return url请求参数部分 * @author lzf */ private static S ...

  7. robotframework ride安装

    之前在python3.3.5的环境下一直无法找到匹配的wxPython版本,只能再装了一个python2.7,后面在2.7的环境下重新安装了robotframework和ride,结果还是无法启动ri ...

  8. UITextView 显示不全的问题

    //设置UITextView的内边距 textView.contentInset = UIEdgeInsetsMake(0, 0, 20, 0);

  9. Block回调

    •Block的定义   •Block.委托.通知.回调函数,它们虽然名字不一样,但是原理都一样,都是"回调机制"的思想的具体实现 •前面的代理模式的项目改为Block回调实现    ...

  10. allegro - 层叠相关参数

      层叠结构设置 弹出Layout Cross Section对话框 Subclass Name一列是该层的名称,可以按照自己的需要来填写.Type 列选择该层的类型,有三种: ·CONDUCTOR: ...