Maison > Java > javaDidacticiel > Élément Utiliser l'initialisation paresseuse avec parcimonie

Élément Utiliser l'initialisation paresseuse avec parcimonie

Mary-Kate Olsen
Libérer: 2025-01-09 14:03:42
original
351 Les gens l'ont consulté

Item  Utilize a inicialização preguiçosa com parcimônia

Qu'est-ce que l'initialisation paresseuse ?

  • Définition : Différer l'initialisation d'un champ jusqu'au premier accès à celui-ci.
  • Avantages : évite les initialisations inutiles si le champ n'est jamais utilisé.
  • Applications : utilisé pour les champs statiques et d'instance.

Meilleures pratiques et exemples

  1. Démarrage normal (préféré) Simple et efficace.

Exemple :

private final FieldType field = computeFieldValue();

Copier après la connexion

Utilisez l'initialisation normale pour la plupart des champs, sauf indication contraire.

  1. Initialisation paresseuse avec getter synchronisé Quand l'utiliser : Pour résoudre les circularités des startups.

Exemple :

private FieldType field;

synchronized FieldType getField() {
    if (field == null) {
        field = computeFieldValue();
    }
    return field;
}

Copier après la connexion

3. Pratique de classe Carrier (pour les champs statiques)

  • Quand utiliser : initialisation paresseuse efficace pour les champs statiques.

Exemple :

private static class FieldHolder {
    static final FieldType field = computeFieldValue();
}

static FieldType getField() {
    return FieldHolder.field;
}

Copier après la connexion

Avantage : initialise la classe uniquement lors de l'accès au champ, avec un coût minimal après initialisation.

4. Pratique de double vérification (pour les champs d'instance)

  • Quand l'utiliser : pour des performances lors d'une initialisation paresseuse sur des champs d'instance.

Exemple :

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;
}

Copier après la connexion

5. Pratique de vérification unique (initialisation répétée autorisée)

  • Quand utiliser : champs pouvant tolérer des initialisations répétées.

Exemple

private volatile FieldType field;

FieldType getField() {
    if (field == null) { // Verificação única
        field = computeFieldValue();
    }
    return field;
}

Copier après la connexion

6. Pratique audacieuse du chèque unique

  • Quand l'utiliser : Uniquement si vous tolérez des initialisations supplémentaires et si le type de champ est une primitive autre que long ou double.

Exemple :

private FieldType field;

FieldType getField() {
    if (field == null) { // Sem volatile
        field = computeFieldValue();
    }
    return field;
}

Copier après la connexion

Considérations générales

Compromis :

  • L'initialisation paresseuse minimise le coût initial mais peut augmenter le coût d'accès au champ.
  • Évaluez avec des mesures de performance.

Synchronisation multithread :

  • Indispensable pour éviter les bugs sérieux.
  • Utilisez des pratiques sûres (par exemple, volatile, verrous).

Utilisation préférée :

  • Champs statiques : pratique de la classe Carrier.
  • Champs d'instance : revérifiez.
  • Démarrage répété autorisé : vérification unique.

Résumé final

  • Démarrez normalement autant que possible.
  • Utilisez l'initialisation paresseuse uniquement lorsque cela est nécessaire pour les performances ou pour résoudre les problèmes de circularité

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal