博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【并发编程】延时初始化
阅读量:6494 次
发布时间:2019-06-24

本文共 1020 字,大约阅读时间需要 3 分钟。

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

转载地址:http://qmkyo.baihongyu.com/

你可能感兴趣的文章
android 读取json数据(遍历JSONObject和JSONArray)(转)
查看>>
UIScrollView中的手势
查看>>
递归和迭代的差别
查看>>
基于jquery的可拖动div
查看>>
可以简易设置文字内边距的EdgeInsetsLabel
查看>>
[詹兴致矩阵论习题参考解答]习题1.3
查看>>
Android Fragment的使用
查看>>
mysql半同步复制实现
查看>>
沙朗javascript总结一下(一)---基础知识
查看>>
js深入研究之函数内的函数
查看>>
LeetCode:4_Median of Two Sorted Arrays | 求两个排序数组的中位数 | Hard
查看>>
uva-12657 - Boxes in a Line(双向链表)
查看>>
python之commands模块
查看>>
android应用开发--------------看RadioGroup源代码,写相似单选选项卡的集成控件(如底部导航,tab等等)...
查看>>
GCD 和延时调用
查看>>
LeetCode - Binary Tree Level Order Traversal
查看>>
FTP协议完全详解
查看>>
iOS:实现图片的无限轮播
查看>>
【C语言天天练(十五)】字符串输入函数fgets、gets和scanf
查看>>
【环境配置】配置sdk
查看>>