ホームページ >Java >&#&チュートリアル >項目 遅延初期化は控えめに使用する
遅延初期化とは何ですか?
ベストプラクティスと例
例:
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; }
一般的な考慮事項
トレードオフ:
マルチスレッド同期:
推奨用途:
最終概要
以上が項目 遅延初期化は控えめに使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。