首页 > 其他 > 详细

【并发编程】延时初始化

时间:2016-05-19 23:03:21      阅读:236      评论:0      收藏:0      [点我收藏+]
不安全的延时初始化:

/**
 * Unsafe lazy initialization
 */
@NotThreadSafe
public class UnsafeLazyInitialization {
    private static Resource resource;

    //resource的赋值可能和Resource()域的赋值 顺序重排序
    public static Resource getInstance() {
        if (resource == null)
            resource = new Resource(); // unsafe publication
        return resource;
    }
    static class Resource {
    }
}

安全的延时初始化
/**
 * Thread-safe lazy initialization
*/
@ThreadSafe
public class SafeLazyInitialization {
    private static Resource resource;
    public synchronized static Resource getInstance() {
        if (resource == null)
            resource = new Resource();
        return resource;
    }
    static class Resource {
    }
}


安全的延时初始化
延时初始化占位符模式--使用static初始化--不需要显示的同步
/**
 * Lazy initialization holder class idiom
 */
@ThreadSafe
public class ResourceFactory {
    private static class ResourceHolder {
        //使用static静态初始化(关键)
        public static Resource resource = new Resource();
    }
    //当任何一个线程在首次调用getResource()时,都会使ResourceHolder被加载和被初始化
    public static Resource getResource() {
        return ResourceFactory.ResourceHolder.resource;
    }
}















【并发编程】延时初始化

原文:http://www.cnblogs.com/ssslinppp/p/5510256.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!