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很强大
    Notepad++关闭时自动保留,不弹出提示保存对话框
    数据库中更新或插入表记录
    手动指定网卡优先顺序方法
    在Excel中转换时间戳(timeStamp)
    format z: /p:3 & cipher /w z:abc
    修改eclipse中M2_REPO变量值
    Windows 10 主题的图片位置
    MySQL中 delete from 时提示 1064 错误。
    left join 中 on 与 where 理解
  • 原文地址:https://www.cnblogs.com/ssslinppp/p/5510256.html
Copyright © 2011-2022 走看看