码迷,mamicode.com
首页 > 编程语言 > 详细

多线程实例

时间:2016-08-02 11:25:52      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

双重检查锁定来实现延迟初始化的方案:

class Instance {

    
}
/*
 *     instance=new Singleton()
    memory = allocate();  // 1:分配对象的内存空间
    ctorInstance(memory);  // 2:初始化对象
    instance = memory;   // 3:设置instance指向刚分配的内存地址
 */
public class SafeDoubleCheckedLocking {
    private volatile static Instance instance;//2,3之间不会重排序
    public static Instance getInstance() {
    if (instance == null) {
        synchronized (SafeDoubleCheckedLocking.class) {
        if (instance == null)
            instance = new Instance(); // instance为volatile,现在没问题了
        }
    }
    return instance;
    }
}

基于类初始化的解决方案:(

JVM在类的初始化阶段(即在Class被加载后,且被线程使用之前),会执行类的初始化。在
执行类的初始化期间,JVM会去获取一个锁。这个锁可以同步多个线程对同一个类的初始化。

)

class Instance{
    
}
public class InstanceFactory {
    private static class InstanceHolder {
        public static Instance instance = new Instance();
    }
    public static Instance getInstance() {
        return InstanceHolder.instance;  // 这里将导致InstanceHolder类被初始化
    }
}

 

多线程实例

标签:

原文地址:http://www.cnblogs.com/james-roger/p/5728325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!