什麼是延遲初始化?
最佳實務與範例
範例:
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中文網其他相關文章!