脚本宝典收集整理的这篇文章主要介绍了Java并发 - volatile/Holder与双重空校验,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码摘选自Dubbo框架的ExtensionLoader
, 非常有趣:
/* ExtensionLoader */ @SuppressWarnings("unchecked") public T getLoadedExtension(String name) { if (name == null || name.length() == 0) throw new IllegalargumentException("Extension name == null"); Holder<Object> holder = cachedInstances.get(name); if (holder == null) { cachedInstances.putIfAbsent(name, new Holder<Object>()); holder = cachedInstances.get(name); } return (T) holder.get(); } /* Just a volatile-helper */ public @H_406_55@class Holder<T> { private volatile T value; public void set(T value) { this.value = value; } public T get() { return value; } }
可以看到, 精华就是Holder-volatile
和双重null校验
的运用;
短短几句代码, 蕴含了:
- volatile关键字的
happens-before
关系 - volatile关键字的
可见性
问题 - Java多线程的执行路径问题, 及
指令重排序
的问题; - (有兴趣的可自行查阅相关资料, 毕竟上述任意一个都是非常繁杂的话题)
这基本上可以作为最佳实践
放入自己项目中的多线程模块
中了, 在此仅做个记录;
以上是脚本宝典为你收集整理的Java并发 - volatile/Holder与双重空校验全部内容,希望文章能够帮你解决Java并发 - volatile/Holder与双重空校验所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。