博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
延迟加载
阅读量:5961 次
发布时间:2019-06-19

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

 

 

延迟加载分为实例域与静态域二种

实例的延迟加载。主要看创建实例的成本。一般需要测试之后才决定是否使用延迟加载。利:消耗资源的对象延迟加载。弊:访问的线程会由于延迟加载变慢同时多线程情况下,需要同步。
实现方式:
一。 synchronized同步方法。
private FieldType field;
synchronized FieldType getField() { if (field == null)
field = computeFieldValue(); return field;
}
二。DC检查更优。 Double-check idiom for lazy initialization of instance fields

private volatile FieldType field; //注意必须使用volatile,volatile除了可见性之外,还有一个功能是避免编译器优化。 FieldType getField() {
  FieldType result = field;   if (result == null) {
// First check (no locking)    synchronized(this) { //这样不会象1)中synchronized整个方法,导致在初始化成功之后,访问getInstance仍然要同步的低效.     result = field; //这里使用result的原因是让result即使result由于JIT无序写入出现不为null并且没有完全初始化的情况,但是可以是能field要么为null,要么被完整初始化。此时field是null.     if (result == null){
// Second check (with locking) field //field肯定是在result完全初始化之后的值。 field = result = computeFieldValue();     }   } return result; }

静态域的延迟加载:Lazy initialization holder class idiom for static fields

private static class FieldHolder {
  static final FieldType field = computeFieldValue(); } static FieldType getField() { return FieldHolder.field; }

 

静态域的延迟加载-》演变成单例实现:

public SNSCacheUtil{
  ...... private static class SingletonHolder {
static SNSCacheUtil INSTANCE = new SNSCacheUtil(); } public static SNSCacheUtil getInstance() {
return SingletonHolder.INSTANCE; }   ...... }

 参http://www.ibm.com/developerworks/cn/java/j-dcl.html

 
 
 
 

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

你可能感兴趣的文章
服务器迁移小记
查看>>
FastDFS存储服务器部署
查看>>
Android — 创建和修改 Fragment 的方法及相关注意事项
查看>>
swift基础之_swift调用OC/OC调用swift
查看>>
Devexpress 15.1.8 Breaking Changes
查看>>
Java B2B2C多用户商城 springcloud架构- common-service 项目构建过程(七)
查看>>
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
c++读取和写入TXT文件的整理
查看>>
linux安全问答(1)
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析
查看>>
Server-01 How to Find the Remote Desktop Port
查看>>
Java--接口、抽象与继承
查看>>
通过IP判断登录地址
查看>>
Oracle闪回技术
查看>>
利用单壁路由实现vlan间路由
查看>>
hello world
查看>>