什么是延迟初始化?
最佳实践和示例
示例:
private final FieldType field = computeFieldValue();
除非另有要求,否则大多数字段都使用正常初始化。
示例:
private FieldType field; synchronized FieldType getField() { if (field == null) { field = computeFieldValue(); } return field; }
3。运营商级练习(静态场)
示例:
private static class FieldHolder { static final FieldType field = computeFieldValue(); } static FieldType getField() { return FieldHolder.field; }
优点:仅在访问字段时初始化类,初始化后成本最小。
4。双重检查练习(对于实例字段)
示例:
private volatile FieldType field; FieldType getField() { FieldType result = field; if (result == null) { // Primeira verificação (sem bloqueio) synchronized (this) { result = field; if (result == null) { // Segunda verificação (com bloqueio) field = result = computeFieldValue(); } } } return result; }
5。单次检查练习(允许重复初始化)
示例
private volatile FieldType field; FieldType getField() { if (field == null) { // Verificação única field = computeFieldValue(); } return field; }
6。大胆的单一检查练习
示例:
private FieldType field; FieldType getField() { if (field == null) { // Sem volatile field = computeFieldValue(); } return field; }
一般注意事项
权衡:
多线程同步:
首选用途:
最终总结
以上是Item 谨慎使用延迟初始化的详细内容。更多信息请关注PHP中文网其他相关文章!