java单例设计模式详解

原创 2013年12月03日 22:00:36
/*
 * 单例设计模式:
 * 避免其它程序过多建立该类对象,
 * 先禁止其他程序建立该类对象。
 * 还要让其他程序访问到该类对象,
 * 在本类中自己定义一个对象。
 * 方便其他程序可以访问,
 * 对外提供访问方式
 * 
 * 体现:
 * 构造函数私有化
 * 在类中创建一个本类对象
 * 提供获取该类对象方法
 */

/*
 * 这种方式叫做饿汉式
 * Singleton类一进内存,就已经创建好了对象
 */

public class Singleton {

	private Singleton() {

	}

	// 这里必须是私有的,要不然外面的程序可以直接访问这个属性了
	private static Singleton s = new Singleton();

	public Singleton getInstance() {
		return s;
	}

}

/*
 * 这种方式叫懒汉式
 * Singleton一进内存,对象还没存在
 * 只有调用了getInstance方法才建立对象
 * 延迟加载
 */
public class Singleton {

	private Singleton() {

	}

	// 这里必须是私有的,要不然外面的程序可以直接访问这个属性了
	private static Singleton s = null;

	public Singleton getInstance() {
		if (s == null) {
			s = new Singleton();
		}
		return s;
	}

}

/*
 * 饿汉式,简单,安全,懒汉式存在缺陷, 因为如果A、B同时调用懒汉式的getInstance方法, A调用时,执行到s==null不执行了,
 * cpu去执行B的getInstance方法去了, 执行到s==null的时候也不执行了,cpu又去执行A了,
 * 然后Anew了个对象赋值给了s,返回了。然后cpu又去执行B, B也new了个对象赋值给s,把A里的s覆盖掉了!,也返回了,
 * 这时候就不是同一对象了(典型的线程同步问题, 解决方案是在getInstance方法上加上synchronized,
 * 把s对象锁起来就好了)加上锁程序效率就低了 最终解决方案:双重判断、减少读锁次数
 */
/*
 * public Singleton getInstance() { if(s == null) { synchronized
 * (Singleton.class) { if(s == null) { s = new Singleton(); } } } return s; }
 */

相关文章推荐

java 单例设计模式

  • 2014年10月07日 11:08
  • 126KB
  • 下载

【14】-java的单例设计模式详解

预加载模式代码:public class Singleton { private volatile static Singleton singleton = new Singleton(); ...

java单例设计模式

  • 2015年04月22日 21:10
  • 73KB
  • 下载

java单例设计模式的好处

  • 2013年04月19日 14:59
  • 140KB
  • 下载

Java单例设计模式详解

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。   单例模式有一下特点:   1、单例类只能有一个实例。   2、单例类必须自己自己创建自己的唯...

【Java开发】设计模式之单例详解

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证应用中一个单例类只有且只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并提供全局访问点...

Java的单例设计模式

  • 2015年12月29日 21:57
  • 5KB
  • 下载

java单例设计模式

  • 2016年07月31日 22:32
  • 20KB
  • 下载

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是cl...

黑马程序员_Java基础_面向对象,封装,继承,单例设计模式,构造函数,构造代码块

一,面向对象 1,基本理解 面向对象其实是一种思想,现实生活中我们所看到的东西,包括想到的一个概念都可以看做是一个对象。 如果有人问到你对面向对象的理解,可以举一个例子说明,比如:我们去餐馆就餐...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java单例设计模式详解
举报原因:
原因补充:

(最多只允许输入30个字)