Maison Java javaDidacticiel Qu'est-ce qu'une impasse dans l'apprentissage simultané de Java ? Introduction à l'impasse

Qu'est-ce qu'une impasse dans l'apprentissage simultané de Java ? Introduction à l'impasse

Oct 22, 2018 pm 05:48 PM
java并发 死锁

Le contenu de cet article concerne l'apprentissage simultané de Java. Qu'est-ce qu'un blocage ? Introduction à l'impasse. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

  • Introduction au blocage :
    Lock est un outil très utile qui s'exécute dans de nombreux scénarios car il est très simple à utiliser et facile à comprendre. Mais en même temps, cela entraînera également certains problèmes, tels que des problèmes de blocage. Par exemple, il existe deux threads A et B, qui nécessitent tous deux deux ressources a et b pour s'exécuter. A obtient la ressource a et B obtient la ressource b. Ensuite, A demande la ressource b et B demande la ressource a. Les deux threads se bloquent et provoquent un blocage.

  • Exemple de code :

public calss DeadLockDemo{
	private static String A = "A";
	private static String B = "B";
	public static void main(String[] args){
		new DeadLockdemo().deadLock();
	}
	private void deadLock(){
		Thread t1 = new Thread(new Runnable(){
			@Override
			public void run(){
				synchronized(A){
					try{
						Thread.currentThread().sleep(2000);
					}catch(Exception e){
					  e.printStackTrace();
					 }
					 synchronized(B){
					 	System.out.println("B");
					 }
				}
			}
		});
		Thread t2 = new Thread(new Runnable(){
			@Override
			public void run(){
				synchronized(B){
					try{
						Thread.currentThread().sleep(2000);
					}catch(Exception e){
					  e.printStackTrace();
					 }
					 synchronized(A){
					 	System.out.println("A");
					 }
				}
			}
		});
		t1.start();
		t2.start();
	}
}
Copier après la connexion

Un blocage se produira après l'exécution du code ci-dessus, et t1 et t2 se bloquent mutuellement.

  • Analyse de scénario de blocage :
    Dans un scénario plus complexe, vous pouvez rencontrer un tel problème après que t1 ait obtenu le verrou, en raison de certaines conditions anormales sans libérer le verrou (infini. boucle). Ou t1 a obtenu un verrou de base de données, et lors de la libération du verrou, une exception a été levée mais n'a pas été libérée.

  • Plusieurs façons d'éviter les blocages :
    1. Essayez d'éviter qu'un thread n'acquière plusieurs verrous en même temps.
    2. Essayez d'éviter qu'un thread n'occupe plusieurs supports en même temps et essayez de n'occuper qu'une seule ressource à la fois.
    3. Essayez d'utiliser le verrouillage horaire. Lock.tryLock(timeout) utilise à la place le mécanisme de verrouillage interne.
    4. Pour les verrouillages de base de données, le verrouillage et le déverrouillage doivent être effectués au sein d'une connexion à la base de données.

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.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Comment gérer l'accès simultané dans le développement de fonctions backend Java ? Comment gérer l'accès simultané dans le développement de fonctions backend Java ? Aug 04, 2023 pm 08:22 PM

Comment gérer l'accès simultané dans le développement de fonctions backend Java ? Dans les applications Internet modernes, un accès simultané élevé constitue un défi courant. Lorsque plusieurs utilisateurs accèdent aux services backend en même temps, si la simultanéité n'est pas gérée correctement, cela peut entraîner des problèmes tels que la cohérence des données, les performances et la sécurité. Cet article présentera quelques bonnes pratiques pour gérer les accès simultanés dans le développement backend Java. 1. Utiliser la synchronisation des threads Java fournit une variété de mécanismes pour gérer les accès simultanés, le plus couramment utilisé étant la synchronisation des threads. En ajoutant la synchronisation avant les blocs ou méthodes de code clé

Comment gérer les problèmes de blocage dans le développement C++ Comment gérer les problèmes de blocage dans le développement C++ Aug 22, 2023 pm 02:24 PM

Comment gérer les problèmes de blocage dans le développement C++ Le blocage est l'un des problèmes courants dans la programmation multithread, en particulier lors du développement en C++. Des problèmes de blocage peuvent survenir lorsque plusieurs threads attendent les ressources de chacun. S'il n'est pas traité à temps, un blocage entraînera non seulement le gel du programme, mais affectera également les performances et la stabilité du système. Par conséquent, il est très important d’apprendre à gérer les problèmes de blocage dans le développement C++. 1. Comprendre les causes des blocages. Pour résoudre le problème de blocage, vous devez d'abord comprendre les causes des blocages. Une impasse se produit généralement lorsque

Prévention et solution des blocages et de la famine dans le contrôle de concurrence des fonctions Golang Prévention et solution des blocages et de la famine dans le contrôle de concurrence des fonctions Golang Apr 24, 2024 pm 01:42 PM

Blocage et famine dans Go : prévenir et résoudre les blocages : les coroutines s'attendent les unes les autres et ne peuvent pas effectuer d'opérations. Utilisez la fonction runtime.SetBlockProfileRate pour détecter. Prévenir les blocages : utilisez un verrouillage précis, des délais d'attente et des structures de données sans verrouillage pour éviter les blocages. Famine : la coroutine continue d'être incapable d'obtenir des ressources et des verrous équitables sont utilisés pour éviter la famine. Pratique de verrouillage équitable : créez un verrou équitable et attendez que la coroutine tente d'acquérir le verrou le plus longtemps possible pour acquérir le verrou en premier.

Mécanisme de prévention et de détection des blocages dans la programmation multithread C++ Mécanisme de prévention et de détection des blocages dans la programmation multithread C++ Jun 01, 2024 pm 08:32 PM

Le mécanisme de prévention des blocages multithread comprend : 1. Séquence de verrouillage ; 2. Test et configuration. Le mécanisme de détection comprend : 1. Timeout ; 2. Détecteur de blocage. L'article prend l'exemple d'un compte bancaire partagé et évite les blocages grâce à une séquence de verrouillage. La fonction de transfert demande d'abord le verrouillage du compte de transfert sortant, puis le transfert du compte entrant.

Comment utiliser le framework Fork/Join dans la concurrence des fonctions Java et le multi-threading ? Comment utiliser le framework Fork/Join dans la concurrence des fonctions Java et le multi-threading ? Apr 27, 2024 am 10:09 AM

Comment créer des tâches parallèles à l'aide du framework Fork/Join en Java ? Définissez la logique des tâches, calculez les résultats ou effectuez des actions. Créez un ForkJoinPool pour gérer les threads parallèles. Utilisez la méthode fork() pour soumettre des tâches. Utilisez la méthode join() pour obtenir les résultats de la tâche.

Comment déboguer les blocages dans les programmes C++ ? Comment déboguer les blocages dans les programmes C++ ? Jun 03, 2024 pm 05:24 PM

Le blocage est une erreur courante dans la programmation simultanée qui se produit lorsque plusieurs threads attendent les verrous détenus les uns par les autres. Les blocages peuvent être résolus à l'aide d'un débogueur pour les détecter, analyser l'activité des threads et identifier les threads et les verrous impliqués. Les moyens de résoudre les blocages consistent notamment à éviter les dépendances circulaires, à utiliser des détecteurs de blocage et à utiliser des délais d'attente. En pratique, les blocages peuvent être évités en garantissant que les threads acquièrent les verrous dans le même ordre ou en utilisant des verrous récursifs ou des variables de condition.

Comment résoudre l'impasse dans le développement Go Comment résoudre l'impasse dans le développement Go Jun 30, 2023 pm 04:58 PM

Méthodes pour résoudre le problème de blocage dans le développement du langage Go Le langage Go est un langage compilé open source à typage statique qui est largement utilisé dans la programmation simultanée. Cependant, en raison des caractéristiques du modèle de concurrence du langage Go, les développeurs rencontrent souvent des problèmes de blocage lors de l'écriture de programmes concurrents. Cet article présentera quelques méthodes pour résoudre le problème de blocage dans le développement du langage Go. Premièrement, nous devons comprendre ce qu’est une impasse. Le blocage fait référence à une situation dans laquelle plusieurs tâches simultanées ne peuvent pas poursuivre leur exécution car elles attendent les unes les autres pour libérer des ressources. En langage Go, les problèmes de blocage sont généralement dus à la concurrence pour les ressources ou

Application du mécanisme de réflexion dans la concurrence Java ? Application du mécanisme de réflexion dans la concurrence Java ? Apr 15, 2024 pm 09:03 PM

Réponse : Le mécanisme de réflexion permet aux programmes Java d'inspecter et de modifier des classes et des objets au moment de l'exécution via l'API de réflexion, qui peut être utilisée pour implémenter des mécanismes de concurrence flexibles dans la concurrence Java. Application : créez dynamiquement des threads. Changez dynamiquement la priorité du thread. Injecter des dépendances.

See all articles