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. jquery 序列化

    //生成发件人Json信息 function buildSenderInfoJson() { var sendName = $("#SendName").val(); var se ...

  2. Python数据库备份脚本

    Python数据库备份脚本 #!/usr/bin/env python # author: liudong # -*- coding: utf-8 -*- # filename: db_bak.py ...

  3. android_demo之自动生成动态表格

    今天我们学习了如何更好的利用Android 的 layout 布局. 接下来是个简单的栗子去了解这个自动生成的动态的控件(自动生成表格) 这是我们的layout 页面 <?xml version ...

  4. 安装好oracle后,打开防火墙遇到的问题!

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT -A INPUT -j REJECT --reject-with ...

  5. Python--Argparse学习感悟

    笔者在https://docs.python.org/2/howto/argparse.html#id1上,学习到了argparse的基本概念和使用规范,学习过后忍不住将自己的一些体会和大家分享一下. ...

  6. 【UVA11082】Matrix Decompressing(有上下界的网络流)

    题意:给出一个矩阵前i列所有元素的和,和前j行所有元素的和,求这个矩阵解压以后的原型.(答案不唯一) n,m<=20,1<=a[i,j]<=20 思路:这道题把边上的流量作为原先矩阵 ...

  7. php 验证码

    $im =imagecreate(500,500); $bak =imagecolorallocate($im,200,100,0); $shk = imagecolorallocate($im,0, ...

  8. 网站appache的ab命令压力测试性能

    ①:相关不错的博文链接:http://johnnyhg.iteye.com/blog/523818 ②:首先配置好对应的环境上去,有对应的命令 ③:压力测试的指令如下: 1. 最基本的关心两个选项 - ...

  9. call

    -------siwuxie095 call 调用另一个批处理程序或自身程序段,调用完,程序会回到原来 call 的地方继续执行 如果在脚本或批处理文件外使用 call,则不会在命令行起作用 语法 c ...

  10. java验证码刷新

    可以使用a标签,这样省事 <img id="code_img" src="validcode" alt="登录验证码" /> & ...