java 单例模式与线程安全性问题

饿汉式

饿汉式就是在变量申明的时候就完成初始化工作

优点:没有线程安全性问题

缺点:在程序加载时,单例模式的实体就已经被创建了,存在性能问题

public class Singleton {
	
	// 私有化构造方法
	private Singleton () {}

	private static Singleton instance = new Singleton();
	
	public static Singleton getInstance() {
		return instance;
	}			
}

懒汉式

懒汉式就是在变量需要使用的时候调用初始化函数进行构造

package com.roocon.thread.t5;

public class Singleton2 {
	
	private Singleton2() {}
	
	private static volatile Singleton2 instance;
	
	/**
	 * 双重检查加锁
	 * 
	 * @return
	 */
	public static Singleton2 getInstance () {
		// 考虑到程序性能,不能直接在方法中加synchronized,应该加在方法块上
		if(instance == null) {
			synchronized (Singleton2.class) {
				if(instance == null) {
					instance = new Singleton2();  // 指令重排序	
					// 申请一块内存空间   // 1
					// 在这块空间里实例化对象  // 2
					// instance的引用指向这块空间地址   // 3
				}
			}
		}
		return instance;
	}
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页