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. 如何在SqlServer中获取前端连接的IP地址,计算机名等信息

    在一些需求中,可能我们需要知道连接到SqlServer的前端程序的一些系统信息,比如前端连接的计算机名称,IP地址,什么时候开始请求连接,什么时候结束连接等信息. 如果你对SqlServer的系统函数 ...

  2. {ICIP2014}{收录论文列表}

    This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinc ...

  3. Ionic打包过程下载Gradle失败的解决方法

      安卓应用现在很多都是基于gradle进行大包,ionic默认的打包命令 cordova  build --release  android 就是使用gradle进行打包,但同时ionic也支持in ...

  4. python的类与对象

    类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...

  5. U盘安装WIN10专业版

    安装环境1个SSD,2个SATA盘. 安装时把2个SATA盘拔掉,并使SSD在BISO中的地位为0区的MASTER,否则安装时会出现,无法创建当前分区,和新建当前分区. 步骤:下载win10正式专业版 ...

  6. SQL日期格式,转自will哥

    我之前一直認為 SQL Server 針對日期處理的函數不夠多(如果跟 MySQL 比較),尤其是處理日期欄位轉字串的時候,常常因為要輸出特定的格式而懊惱不已,常常一不小心就寫了一長串,很不易閱讀. ...

  7. spring整合freemarker

    一.配置maven <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  8. JcClient Ip Get

    ##通道##123.207.157.82:18425## ##通道##112.95.251.214:18425## ##通道##110.52.233.5:18425## ##通道##119.29.19 ...

  9. MonoDev 冷门而好用的功能

    [MonoDev 冷门而好用的功能] 1.Ctrl + B.跳转到对应的{}.(). 2.View -> Editor Layout -> 2 Columns.双屏工作. 3.Editr ...

  10. 【C#】项目优化实战

    [C#]项目优化实战 一. 数据库设计 1. 常量的枚举值直接存中文不要存数字(注意是常量,如果显示值可变就不能) 例如:男女,在数据库中不要存1和0,直接存男和女. 这样的好处:读取数据的时候可以避 ...