Java延迟加载建议

来源:互联网 发布:淘宝外贸原单鞋店推荐 编辑:程序博客网 时间:2024/05/17 09:16
package com.xqh.test;/** * 大多数的域应该正常地进行初始化,而不是延迟初始化。如果为了达到性能目的,或者为了破坏有害的初始化循环 * 而必须延迟初始化一个域,就可以使用相应的延迟初始化方法。 * 对于实例域,就使用双重检查模式; * 对于静态域,则使用lazy initialization holder class idiom; * 对于可以接受重复初始化的实例域,也可以考虑使用单重检查模式 * @author Snway * */public class LazyInit {private final String field_0 = getFieldValue(); // 正常初始化// 延迟加载 方法1private 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";}}


原创粉丝点击