您的位置:首页 > 编程语言 > Java开发

java线程安全的单例模式

2015-06-30 11:39 766 查看
public class SingleInstance {

//此处使用vlatile关键字修饰 instance,确保instance对于每个线程都可见,
//即每个线程都能拿到最新的instance的值。
private volatile static SingleInstance instance;

private SingleInstance(){}

public static SingleInstance getInstance(){

if(null == instance){

//使用全局类锁,保证同步
synchronized (SingleInstance.class) {

//避免重复创建对象提高效率
if(null == instance){
instance = new SingleInstance();
}
}
}

return instance;
}

}
JVM编译的过程中会出现指令重排的优化过程,这就会导致当 instance实际上还没初始化,就可能被分配了内存空间,也就是说会出现 instance !=null 但是又没初始化的情况,这样就会导致返回的 instance 不完整第二种使用内部类
public class SingletonInner {/*** 内部类实现单例模式* 延迟加载,减少内存开销**  类级内部类相当于其外部类的static成员,它的对象与外部类对象间不存在依赖关系,*  相互独立,因此可直接创建。而对象级内部类的实例,是必须绑定在外部对象实例上的。*  类级内部类只有在第一次被使用的时候才被会装载** @author xuzhaohu**/private static class SingletonHolder {private static SingletonInner instance = new SingletonInner();}/*** 私有的构造函数*/private SingletonInner() {}public static SingletonInner getInstance() {return SingletonHolder.instance;}protected void method() {System.out.println("SingletonInner");}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: