zoukankan      html  css  js  c++  java
  • 【并发编程】延时初始化

    不安全的延时初始化:

    /**
     * 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 {
        }
    }
    线程not-safe说明:


    安全的延时初始化
    /**
     * 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;
        }
    }















  • 相关阅读:
    css3
    js的去重
    mongodb的db.collection is not function
    mongoose的关联查询 :populate
    html/css杂题
    经典的Foo和getName
    AngularJS控制器
    AJAX请求小项目
    AngularJS 依赖注入
    Canvas画布实现自定义时钟效果
  • 原文地址:https://www.cnblogs.com/ssslinppp/p/5510256.html
Copyright © 2011-2022 走看看