JAVA单例设计模式 萌新学习篇

单例设计模式就是只可以创建一个对象实例,  如果想要达到目的,首先该对象的构造方法应该是私有的 ;其他类想要使用,我们还需要一个公共静态方法,以提供得到对象的操作.

  1,首先 ,你可能选择创建一个私有静态对象,然后写一个公共方法已到达目的

private static InstanceDemo instance2 = new InstanceDemo();//创建私有静态对象
public static InstanceDemo getInstance2() {//公共静态方法,用来得到对象
		return instance2;
	}

类似于这种方式 ,一般称为饿汉模式 ,这种方法会在加载类时(甚至是你不需要这个对象时) ,所以会造成不必要的浪费,当然 也是可以这么做

2,第二种呢 ,为了避免上一种的问题, 我们可以创建一个先创建一个引用 然后在公共方法里面进行实例化(懒汉模式),如下:

private static InstanceDemo instance = null;
public static  InstanceDemo getInstance() {
		if(instance==null){
			instance = new InstanceDemo();
		}	
		return instance;
	}

虽然看的比较完美,但是 有一个问题是 ,单例确实做到了

 如果是多线程 ,他可以保证正确吗?

3,第三种,就是处理多线程的问题:

第一种:使用同步块和双重检查  synchronized(synObject){}

 
  
private static InstanceDemo instance = null;
	public static  InstanceDemo getInstance() {
		if(instance==null){
			synchronized(InstanceDemo.class) { //此处的synchronized用来指定某个对象,此对象的锁被用来对花括号内的代码进行控制(think in java: page:685)
				if(instance==null) {
					instance = new InstanceDemo();
				}
			}
		return instance;
	}

第二种就是使用synchronized 关键词

private static  InstanceDemo instance = null;
public static synchronized InstanceDemo getInstance() {
			if(instance==null) {
				instance = new InstanceDemo();
			}
		return instance;
	}
本人觉得 第一种好一点 ,


第一次写博客 ,如有问题或建议,请积极指正.








你可能感兴趣的:(笔记)