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;
        }
    }















  • 相关阅读:
    h5基本单词
    啦啦
    新内容
    Apache.PHP和MySQL的配置
    static关键字
    访问控制
    PHP Session
    PHP cookie
    全局空间
    使用use操作符导入/使用别名
  • 原文地址:https://www.cnblogs.com/ssslinppp/p/5510256.html
Copyright © 2011-2022 走看看