Galerie de cartes mentales Concurrence Java
Il s'agit d'une carte mentale sur la concurrence Java. Le contenu principal comprend : les verrous, les pools de threads, les conteneurs simultanés et les concepts de base.
Modifié à 2024-04-22 19:41:17Il s'agit d'une carte mentale sur les activités des grandes institutions. Le contenu principal comprend : les pairs financiers, les clients institutionnels gouvernementaux, les sociétés cotées et les investisseurs institutionnels. (Private equity et autres gestionnaires).
Culture tissulaire, le système respiratoire comprend le nez, le pharynx, le larynx, la trachée, les bronches et les poumons. L'introduction est détaillée et les connaissances sont complètes. J'espère qu'elle pourra être utile à tout le monde !
Selon la culture tissulaire, le tube digestif est un tube continu allant de la bouche à l'anus, divisé en cavité buccale, pharynx, œsophage et estomac, intestin grêle et gros intestin. L'introduction est détaillée et les connaissances sont complètes. J'espère qu'elle pourra être utile à tout le monde !
Il s'agit d'une carte mentale sur les activités des grandes institutions. Le contenu principal comprend : les pairs financiers, les clients institutionnels gouvernementaux, les sociétés cotées et les investisseurs institutionnels. (Private equity et autres gestionnaires).
Culture tissulaire, le système respiratoire comprend le nez, le pharynx, le larynx, la trachée, les bronches et les poumons. L'introduction est détaillée et les connaissances sont complètes. J'espère qu'elle pourra être utile à tout le monde !
Selon la culture tissulaire, le tube digestif est un tube continu allant de la bouche à l'anus, divisé en cavité buccale, pharynx, œsophage et estomac, intestin grêle et gros intestin. L'introduction est détaillée et les connaissances sont complètes. J'espère qu'elle pourra être utile à tout le monde !
Concurrence Java
concept de base
processus
tas
zone de méthode
Le tas et la zone de méthode sont des ressources partagées par tous les threads. Le tas est la plus grande partie de la mémoire du processus et est principalement utilisé pour stocker les objets nouvellement créés (presque tous les objets allouent de la mémoire ici). La zone de méthode est principalement utilisée pour stocker les objets chargés. objets. Informations de classe, constantes, variables statiques, code compilé par un compilateur juste à temps et autres données.
fil
compteur de programme
Pile de machines virtuelles
pile de méthodes natives
Il peut y avoir plusieurs threads dans un processus, et plusieurs threads partagent les ressources du tas et de la zone de méthode (métaespace après JDK1.8), mais chaque thread possède son propre compteur de programme, sa pile de machines virtuelles et sa pile de méthodes locale.
concurrent
parallèle
Peut facilement entraîner des fuites de mémoire, des blocages et une insécurité des threads
Synchroniser
asynchrone
Sécurité du fil
Créer un fil de discussion
Cycle de vie et état des threads
NOUVEAU
Prêt (exécutable)
En cours d'exécution
Bloqué
Blocage synchrone (bloqué)
En attente de blocage (ATTENTE)
Blocage du délai d'attente (TMME-WAITING)
Décès (Mort/TERMINÉ)
Changement de contexte de fil de discussion
impasse de thread
Quatre conditions nécessaires à une impasse
Comment éviter une impasse
Comment dépanner
Graphique : jconsole
jps -l découvre le numéro de processus du programme, le numéro de processus jstack
JMM
définition
arrière-plan
Cohérence CPU et cache
Optimisation du processeur
Réorganisation parallèle des instructions
Réarrangement de l'optimisation du compilateur
Réarrangement du système de mémoire
Théorie de la concurrence
règles comme si elles étaient en série
la règle arrive avant
règles de séquence de programme
Surveiller les règles de verrouillage
Règles de variables volatiles
règle de transitivité
règle start()
règles join()
Trois caractéristiques majeures
atomicité
visibilité
Ordre
Comment résoudre les problèmes de concurrence
Trois mots-clés majeurs
volatil
visibilité
arrive avant le principe
principe
écrire la sémantique de la mémoire
Lire la sémantique de la mémoire
Ordre
Implémentation de la sémantique de la mémoire
synchronisé
effet
atomicité
Ordre
visibilité
écrire la sémantique de la mémoire
Lire la sémantique de la mémoire
Usage
Méthodes de décoration d'instance
Modifier les méthodes statiques
Décorer des blocs de code
principe
bloc de code synchronisé
méthode de synchronisation
modèle objet Java
En-tête d'objet
Marquer le mot
Point de classe
Données d'instance
Alignement des octets
mise à niveau du verrouillage
aucun verrou
Statut de verrouillage
verrouillage de biais
Statut de verrouillage
Temps de mise à niveau
Opérations spécifiques
avantage
L’ID de thread biaisé est incohérent avec l’ID de thread actuel.
Succès en compétition
La compétition a échoué
Réalisation technique
serrure légère
Statut de verrouillage
Temps de mise à niveau
effet
Rotation
La différence entre le verrouillage de biais et le verrouillage de biais
Serrure lourde
Statut de verrouillage
Temps de mise à niveau
principe
optimisation jdk1.6
verrouillage de la rotation
verrouillage de rotation adaptatif
élimination du verrou
dégrossissage des serrures
verrouillage de biais
serrure légère
final
effet
Règles de réorganisation
Écrire des règles de réorganisation pour les champs finaux
Réorganisation des règles de lecture des champs finaux
barrière de mémoire
conteneur simultané
Liste
CopyOnWriteArrayList
Vecteur
Ensemble
CopyOnWriteArraySet
Carte
ConcurrentHashMap
ConcurrentSkipListMap
Table de hachage
file d'attente
ArrayBlockingQueue
LinkedBlockingQueue
File d'attente de blocage prioritaire
File d'attente synchrone
Pool de threads
définition
Avantage
Réduire la consommation de ressources
Améliorer la vitesse de réponse
Améliorer la gestion des threads
Comment créer
Exécuteurs testamentaires
Pool de threads fixe
Exécuteur de thread unique
Une LinkedBlockingQueue illimitée est probablement utilisée. La longueur maximale de la file d'attente des tâches est Integer.MAX_VALUE. Un grand nombre de requêtes peuvent s'accumuler, ce qui entraîne un MOO.
Pool de threads mis en cache
La file d'attente de synchronisation SynchronousQueue est utilisée et le nombre de threads pouvant être créés est Integer.MAX_VALUE.
Pool de threads planifié
La file d'attente de blocage retardée illimitée DelayedWorkQueue est utilisée. La longueur maximale de la file d'attente des tâches est Integer.MAX_VALUE, ce qui peut accumuler un grand nombre de requêtes, entraînant un MOO.
ThreadPoolExécuteur
Paramètres communs
taille du pool de base
taille maximale de la piscine
file d'attente de travail
garderAliveTime
unité
filFactory
gestionnaire
Politique d'abandon
Politique d'exécution de l'appelant
Politique de rejet
Rejeter la politique la plus ancienne
Processus de gestion des tâches
Comment définir la taille du pool de threads
Algorithme théorique
méthode empirique
Tâches gourmandes en CPU (N 1)
Tâches gourmandes en E/S (2N)
Future classe
Annuler la tâche
Déterminer si la tâche a été annulée
Déterminer si la tâche est terminée
Obtenez les résultats de l'exécution des tâches
défaut
ComplétableFutur
Résoudre les lacunes du futur
avantage
Étape d'achèvement
Verrouillage
concept de base
serrure pessimiste
avantage
Le coût du verrouillage pessimiste est fixe
défaut
Une concurrence féroce entre les verrous peut provoquer un blocage des threads
Un grand nombre de threads bloqués entraîneront un changement de contexte du système Augmenter la surcharge des performances du système
Un verrouillage pessimiste peut également provoquer des problèmes de blocage
Scène applicable
Écrivez plusieurs scénarios et une concurrence féroce (pour éviter les échecs et les tentatives fréquentes qui affectent les performances)
verrouillage optimiste
avantage
Il n'y a pas de concurrence de verrouillage provoquant un blocage des threads
Il n'y aura pas de problème de blocage
défaut
Si des conflits surviennent fréquemment (de nombreuses écritures se produisent), il y aura des échecs et des tentatives fréquentes.
Scène applicable
Plusieurs scénarios de lecture, moins de concurrence (peut éviter des blocages fréquents affectant les performances)
Plan de mise en œuvre
Mécanisme de numéro de version
Algorithme CAS
Questions ABA
Temps de cycle long et frais généraux élevés
Seules les opérations atomiques sur une variable partagée sont garanties
SujetLocal
effet
principe
Algorithme de hachage
Conflit de hachage
Problème de fuite de mémoire
raison
solution
AQS
idée principale
État
File d'attente CLH
structure
principe
avantage
Excellentes performances, faible surcharge pour l'acquisition et le déverrouillage des verrous.
serrure équitable
Simple à mettre en œuvre et facile à comprendre
Forte évolutivité
défaut
L’opération de rotation entraînera une surcharge importante du processeur lorsque le verrou est maintenu pendant une longue période.
Fonction unique et ne peut pas prendre en charge des fonctions complexes
Variantes de la cohorte CLH
AQS modifie l'opération de rotation en bloquant l'opération de thread
Améliorations du verrouillage des structures de données
Étendre l'état de chaque nœud
SIGNAL
PROPAGER
CONDITION
ANNULÉ
Maintenir explicitement les nœuds prédécesseurs et successeurs
Optimisation du GC auxiliaire, par exemple en définissant explicitement le nœud de sortie de file d'attente sur null
Diagramme schématique
serrure partagée
serrure exclusive
Verrouillage réentrant
qu'est-ce que
principe
Processus de verrouillage injuste
Lorsque le thread 1 est verrouillé avec succès
Données internes AQS
Le verrouillage du thread 2 a échoué
Situation de la file d'attente CLH
Le verrouillage du fil trois a échoué
Processus de verrouillage équitable
Processus de déverrouillage
Le processus de libération du verrou
En attente des données de la file d'attente
données de la file d'attente finale
Condition
Principe de mise en œuvre
RéentrantReadWriteLock
Scène applicable
Un thread peut-il toujours acquérir un verrou en écriture s’il détient un verrou en lecture ?
Le verrouillage en lecture ne peut pas être mis à niveau vers le verrouillage en écriture
Sémaphore
Deux modes
mode équitable
Modèle injuste
principe
Compte à rebours
effet
principe
Jetable
Barrière cyclique
Classe atomique
type de base
Entier atomique
AtomiqueLong
AtomiqueBooléen
type de tableau
Tableau d'entiers atomiques
TableauLongAtomique
Tableau de référence atomique
Type de référence
Référence atomique
AtomicStampedRéférence
Type de modification de propriété d'objet
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater