Maison Java Javacommencer Introduction détaillée au modèle singleton

Introduction détaillée au modèle singleton

Aug 10, 2020 pm 04:29 PM
单例模式

Introduction détaillée au modèle singleton

Tout d'abord, jetons un coup d'œil à la définition du modèle singleton :

Le modèle singleton est l'un des modèles de conception les plus simples en Java et est un modèle de création qui fournit la meilleure façon de créer des objets. Le modèle singleton implique une seule classe chargée de créer ses propres objets tout en garantissant qu'un seul objet est créé.

(Tutoriel recommandé : Tutoriel d'introduction à Java)

Afin de vous assurer qu'il n'y a qu'un seul objet en mémoire, évitez la création fréquente d'objets qui entraînent une consommation de mémoire, afin que tout cet objet singleton soit utilisé partout où cet objet doit être appelé.

Examinons ensuite les types de modèles singleton :

1. Style paresseux

Le style paresseux signifie que le singleton ne sera créé que lorsqu'il est nécessaire.

Implémentation paresseuse du modèle singleton :

public class Singleton {
	private static Singleton singleton;
	private Singleton(){
	
	}
	public static Singleton getInstance(){
		if (singleton == null) {
			singleton = new Singleton();
	    }
	    return singleton;
}
Copier après la connexion

Il y a un problème avec l'implémentation paresseuse du singleton, c'est-à-dire comment s'assurer qu'un seul objet est créé ? Si deux threads ou plus déterminent que le singleton est vide en même temps, plusieurs objets seront créés. Nous devons donc résoudre le problème de sécurité des threads.

En matière de sécurité des threads, ce qui me vient à l'esprit est le verrouillage. Le verrouillage n'est rien de plus que le verrouillage d'une méthode ou d'un objet de classe.

//在方法上加锁
public class Singleton {
	private static Singleton singleton;
	private Singleton(){}
	public static synchronized Singleton getInstance() {
    	if (singleton == null) {
        	singleton = new Singleton();
    	}
    return singleton;
	}
}

//在类对象上加锁
public class Singleton {
	private static Singleton singleton;
	private Singleton(){}
	public static Singleton getInstance() {
    synchronized(Singleton.class) {   
        if (singleton == null) {
            singleton = new Singleton();
        }
    }
    return singleton;
	}	
}
Copier après la connexion

Ces deux méthodes peuvent résoudre le problème de la création multi-thread d'objets singleton en même temps, mais chaque fois que vous obtenez l'objet, vous devez d'abord acquérir le verrou et les performances de concurrence sont médiocres. Par conséquent, une optimisation est toujours nécessaire. L'objectif de l'optimisation est le suivant : s'il n'y a pas d'objet instancié, verrouillez-le et créez-le. S'il y a un objet instancié, revenez-le directement.

(Recommandation vidéo d'apprentissage : cours java )

Pour le verrouillage sur les méthodes, le verrouillage est requis, qu'il existe ou non un objet instancié. Par conséquent, ce que nous devons optimiser, c'est verrouiller l'objet de classe.

//DCL单例模式(Double Check + Lock)
public class Singleton {
	//volatite关键词防止指令重排序,下文介绍
	private static volatile Singleton singleton;
	private Singleton(){}
	public static Singleton getInstance() {
	//如果singleton不为空,则直接返回对象,若多个线程发现singleton为空,则进入分支
		if (singleton == null) {
		//多个线程同时争抢一个锁,只有一个线程能成功,其他线程需等待
			synchronized(Singleton.class) {
			//争抢到锁的线程需再次判断singleton是否为空,因为有可能被上个线程实例化了
			//若不为空则实例化,后续线程再进入的时候则直接返回该对象
			//对于之后所有进入该方法的线程则无需获取锁,直接返回对象   
        	if (singleton == null) {
           		singleton = new Singleton();
        	}
    		}
		}
    	return singleton;
	}	
}
Copier après la connexion

Le mot-clé volatile est ajouté au code ci-dessus pour empêcher la réorganisation des instructions.

2. Style chinois affamé

Le style chinois affamé signifie que l'objet singleton est créé lorsque la classe est chargée.

Implémentation du modèle singleton de style chinois affamé :

public class Singleton {
	private static final Singleton singleton = new Singleton();
	private Singleton(){
	
	}
	public static Singleton getInstance(){
		return singleton;
	}
Copier après la connexion

Résumé :

Style Lazy Man : instancier des objets uniquement en cas de besoin En développement, si les besoins en mémoire sont élevés, c'est-à-dire. En utilisant le style paresseux, dans un environnement multithread, vous devez utiliser le mode singleton DCL. L'utilisation du mode singleton DCL résout les problèmes de sécurité de concurrence et de faibles performances. Si vous ajoutez le mot-clé volatile, cela peut également empêcher les exceptions NPE causées par. réorganisation des instructions.

Style chinois affamé : l'objet a déjà été instancié lors du chargement de la classe. Si les besoins en mémoire ne sont pas élevés, utilisez le style chinois affamé. Il est simple, n'est pas sujet aux erreurs et n'en contient pas. problèmes de sécurité et de performances de concurrence.

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un article pour comprendre le modèle singleton en JavaScript Un article pour comprendre le modèle singleton en JavaScript Apr 25, 2023 pm 07:53 PM

Le modèle JS singleton est un modèle de conception couramment utilisé qui garantit qu'une classe n'a qu'une seule instance. Ce mode est principalement utilisé pour gérer les variables globales afin d'éviter les conflits de noms et les chargements répétés. Il peut également réduire l'utilisation de la mémoire et améliorer la maintenabilité et l'évolutivité du code.

L'application du mode singleton et du mode usine dans la surcharge et la réécriture de fonctions C++ L'application du mode singleton et du mode usine dans la surcharge et la réécriture de fonctions C++ Apr 19, 2024 pm 05:06 PM

Modèle Singleton : fournissez des instances singleton avec différents paramètres via une surcharge de fonctions. Modèle d'usine : créez différents types d'objets grâce à la réécriture de fonctions pour dissocier le processus de création des classes de produits spécifiques.

Premiers pas avec PHP : modèle Singleton Premiers pas avec PHP : modèle Singleton May 20, 2023 am 08:13 AM

Dans le développement de logiciels, nous rencontrons souvent des situations où plusieurs objets doivent accéder à la même ressource. Afin d'éviter les conflits de ressources et d'améliorer l'efficacité du programme, nous pouvons utiliser des modèles de conception. Parmi eux, le modèle singleton est un moyen couramment utilisé pour créer des objets, qui garantit qu'une classe n'a qu'une seule instance et fournit un accès global. Cet article explique comment utiliser PHP pour implémenter le modèle singleton et fournit quelques suggestions de bonnes pratiques. 1. Qu'est-ce que le mode singleton ?Le mode singleton est un moyen couramment utilisé pour créer des objets. Sa caractéristique est de garantir qu'une classe n'a qu'une seule instance et fournit.

Modèles de conception PHP : le chemin vers l'excellence du code Modèles de conception PHP : le chemin vers l'excellence du code Feb 21, 2024 pm 05:30 PM

Introduction Les modèles de conception PHP sont un ensemble de solutions éprouvées aux défis courants du développement de logiciels. En suivant ces modèles, les développeurs peuvent créer un code élégant, robuste et maintenable. Ils aident les développeurs à suivre les principes SOLID (responsabilité unique, ouvert-fermé, remplacement de Liskov, isolation d'interface et inversion de dépendance), améliorant ainsi la lisibilité, la maintenabilité et l'évolutivité du code. Types de modèles de conception Il existe de nombreux modèles de conception différents, chacun ayant son propre objectif et ses avantages. Voici quelques-uns des modèles de conception PHP les plus couramment utilisés : Modèle Singleton : garantit qu'une classe n'a qu'une seule instance et fournit un moyen d'accéder à cette instance de manière globale. Modèle d'usine : crée un objet sans spécifier sa classe exacte. Il permet aux développeurs de conditionnellement

En PHP, quel est le concept de design pattern singleton ? En PHP, quel est le concept de design pattern singleton ? Aug 18, 2023 pm 02:25 PM

Le modèle Singleton garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global. Il garantit qu'un seul objet est disponible et sous contrôle dans l'application. Le modèle Singleton fournit un moyen d'accéder directement à son objet unique sans instancier l'objet de la classe. Exemple<?php classdatabase{ publicstatic$connection;

Extension et personnalisation du modèle singleton dans le framework PHP Extension et personnalisation du modèle singleton dans le framework PHP Oct 15, 2023 am 11:10 AM

Extension et personnalisation du mode singleton dans le framework PHP [Introduction] Le mode Singleton est un modèle de conception courant, qui garantit qu'une classe ne peut être instanciée qu'une seule fois dans l'ensemble de l'application. Dans le développement PHP, le modèle singleton est largement utilisé, notamment dans le développement et l'expansion de frameworks. Cet article expliquera comment étendre et personnaliser le modèle singleton dans le framework PHP et fournira des exemples de code spécifiques. [Qu'est-ce que le modèle singleton] Le modèle singleton signifie qu'une classe ne peut avoir qu'une seule instance d'objet et fournit un point d'accès global pour une utilisation externe. En développement PHP, passez

Réflexions sur les problèmes de sécurité des threads en mode singleton en PHP Réflexions sur les problèmes de sécurité des threads en mode singleton en PHP Oct 15, 2023 am 10:14 AM

Réflexion sur les problèmes de sécurité des threads du mode singleton en PHP Dans la programmation PHP, le mode singleton est un modèle de conception couramment utilisé. Il peut garantir qu'une classe n'a qu'une seule instance et fournir un point d'accès global pour accéder à cette instance. Cependant, lors de l'utilisation du modèle singleton dans un environnement multithread, les problèmes de sécurité des threads doivent être pris en compte. L'implémentation la plus basique du modèle singleton comprend un constructeur privé, une variable statique privée et une méthode statique publique. Le code spécifique est le suivant : classSingleton{pr

Scénarios d'application et processus de sécurité des threads du mode singleton dans les systèmes distribués PHP Scénarios d'application et processus de sécurité des threads du mode singleton dans les systèmes distribués PHP Oct 15, 2023 pm 04:48 PM

Scénarios d'application et processus de sécurité des threads du mode singleton dans les systèmes distribués PHP Introduction : Avec le développement rapide d'Internet, les systèmes distribués sont devenus un sujet brûlant dans le développement de logiciels modernes. Dans les systèmes distribués, la sécurité des threads a toujours été un problème important. Dans le développement PHP, le modèle singleton est un modèle de conception couramment utilisé, qui peut résoudre efficacement les problèmes de partage de ressources et de sécurité des threads. Cet article se concentrera sur les scénarios d'application et les processus de sécurité des threads du modèle singleton dans les systèmes distribués PHP, et fournira des exemples de code spécifiques. 1. Mode singleton

See all articles