[java] view plaincopy
-
- public
class LazyInit { -
private final String field_0 = getFieldValue(); // 正常初始化 -
-
// 延迟加载 方法1 -
private String field_3; -
-
synchronized String getStr1() { -
if (field_3 == null) -
field_3 = getFieldValue(); -
return field_3; -
} -
-
// 延迟加载 方法2 出于性能考虑而需要对静态域使用初始化,就使用lazy initialization holder class 模式 -
private static class FieldHolder { -
static final String field = getFieldValue(); -
} -
-
static String getField() { -
return FieldHolder.field; -
} -
-
//延迟加载 方法3 如果出于性能考虑而需要对实例域使用延迟初始化,就使用双重检查模式 -
//第一次检查时没有锁定,看看该域是否被初始化了;第二次检查时锁定 -
private volatile String field_1; -
-
String getField_1() { -
String result = field_1; -
if (result == null) { // 第一次检查 -
synchronized(this) { // 第二次检查,要是没有被初始化才进行初始化。 -
result = field_1; -
if (result == null) -
field_1 = result = getFieldValue(); -
} -
} -
return result; -
} -
-
// 延迟加载 方法4 如果可能需要延迟初始化一个可以接受重复初始化的实例域——单重检查模式 -
-
private volatile String field_2; -
-
String getField_2() { -
String result = field_2; -
if (result == null) -
field_2 = result = getFieldValue(); -
return result; -
} -
-
public static String getFieldValue() { -
return "xqh"; -
} - }