您的位置:首页 > 编程语言

【并发编程】延时初始化

2016-05-19 21:43 253 查看
不安全的延时初始化:
/** * Unsafe lazy initialization
*/@NotThreadSafepublic 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*/
@ThreadSafepublic 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
*/
@ThreadSafepublic class ResourceFactory { private static class ResourceHolder { //使用static静态初始化(关键) public static Resource resource = new Resource(); } //当任何一个线程在首次调用getResource()时,都会使ResourceHolder被加载和被初始化 public static Resource getResource() { return ResourceFactory.ResourceHolder.resource; }}

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: