Android Martin Jr. 2021-08-19 21:42:49 阅读数:741
}
Modifier la méthode non statique,équivalent à:
Je suis sûr que vous vous souvenez de ce que nous avons mentionné dans l'article précédent count+=1
Problèmes de concurrence existants , Maintenant nous pouvons essayer synchronized Essaie un couteau. ,Les codes sont les suivants:.SafeCalc Cette classe a deux méthodes :L'un est get()
Méthodes,Pour obtenir value Valeur de;L'autre est addOne()
Méthodes, Pour donner value Plus 1,Et addOne()
La méthode que nous utilisons synchronized Modification.Alors, y a - t - il un problème de concurrence entre les deux méthodes que nous utilisons?
Voyons d'abord addOne()
Méthodes, D'abord, oui. ,Par synchronized Après modification, Qu'il s'agisse d'un seul noyau CPU Ou multicentrique CPU, Un seul thread peut exécuter addOne()
Méthodes,Donc il doit être garanti que l'opération atomique, Y a - t - il un problème de visibilité? ?
Règles de verrouillage dans la tuyauterie : Déverrouiller une serrure Happens-Before Verrouillage ultérieur de cette serrure.
Pipeline , C'est nous. synchronized( Pour ce qui est du pipeline , Nous vous présenterons plus tard. ),Nous savons que synchronized Les zones critiques modifiées sont mutuellement exclusives ,C'est - à - dire qu'un seul thread exécute le Code de la zone critique en même temps; Et ce qu'on appelle “ Déverrouiller une serrure Happens-Before
Verrouillage ultérieur de cette serrure ”,Indique que l'opération de déverrouillage du fil précédent est visible pour l'opération de verrouillage du fil suivant,Synthèse Happens-Before
Principe de transmission ,Nous pouvons obtenir la variable partagée que le fil précédent a modifiée dans la zone critique( Avant de déverrouiller ), Pour l'entrée ultérieure dans la zone critique ( Cette opération est effectuée après verrouillage ) Les fils sont visibles .
Selon cette règle, Si plusieurs Threads exécutent simultanément addOne()
Méthodes, La visibilité est garantie , Disons que si c'est le cas, 1000 Exécution du thread addOne()
Méthodes, Le résultat final doit être value La valeur de 1000.Voir les résultats, Nous respirons , Le problème est enfin résolu. .
Mais peut - être , Tu l'as ignoré par inadvertance. get()
Méthodes.Mise en œuvre addOne()
Après la méthode,value Paire de valeurs pour get()
La méthode est - elle visible? ?Cette visibilité n'est pas garantie. Règles de verrouillage dans la tuyauterie ,C'est seulement pour assurer la visibilité de cette serrure par la suite,Et get()
Méthode non verrouillée , Donc la visibilité n'est pas garantie . Comment résoudre ça? ?C'est simple.,C'est get()
La méthode synchronized Un instant.,Le code complet est le suivant.
Le code ci - dessus est converti en modèle de serrure que nous avons mentionné, C'est comme ça que ça se passe. .get()
Méthodes et addOne()
Toutes les méthodes doivent être accessibles value Cette ressource protégée , Cette ressource utilise this Cette serrure protège . Thread to enter Critical Area get()
Et addOne()
, Doit être obtenu en premier this Cette serrure. ,Voilà. get()
Et addOne()
C'est aussi mutuellement exclusif. .
Ce modèle ressemble davantage à la gestion des billets de match dans le monde réel,Un siège ne peut être utilisé que par une seule personne, Ce siège est “ Ressources protégées ”, L'entrée du terrain est Java Méthode dans la classe ,Et les billets servent à protéger les ressources“Verrouillage”,Java La vérification des billets est effectuée par synchronized Résolu .
Comme nous l'avons mentionné précédemment,La relation entre les ressources protégées et les serrures est très importante, Quelle est leur relation? ? Une relation raisonnable est :La relation entre la ressource protégée et la serrure est N:1 La relation entre. Et l'analogie avec la gestion des billets pour les matchs précédents, C'est un siège. ,On ne peut utiliser qu'un seul billet pour protéger, S'il y a des billets en double , Il va y avoir une bagarre. . Dans le monde réel ,Nous pouvons utiliser plusieurs serrures pour protéger la même ressource, Mais pas dans le domaine de la concurrence ,Les serrures du domaine de la concurrence ne correspondent pas exactement aux serrures du monde réel.Mais vous pouvez utiliser la même serrure pour protéger plusieurs ressources,Cette correspondance avec le monde réel est ce que nous appelons“ Baochang ”C'est.
Spring- Oui.JavaDu programmeur《Un livre de tournesol》,Tous les grands mouvements qu'il offre,Peut simplifier notre développement,Améliorer considérablement l'efficacité du développement!Pour l'instant99%La société a utiliséSpring,Vous pouvez visiter tous les sites Web de recrutement,SpringC'est un must - have,Alors assurez - vous de maîtriser.
Méthode de collecte des données: Cliquez ici pour accéder au portail bleu
Table des matières:
Contenu partiel:
Son objectif est de simplifierSpringCréation d'applications et de services、Développement et déploiement,Profil simplifié,Utilisation d'un système intégréwebServeur,Contient de nombreuses fonctions de micro - service hors de la boîte,Oui.spring cloudDéploiement conjoint.
Spring BootL'idée centrale est que le contrat est plus grand que la configuration,L'application n'a besoin que de quelques configurations,Simplification du modèle de développement des applications.
Même chose. Spring Cloud C'est pareil,Spring Cloud Alibaba C'est aussi une solution de micro - service,.Contient les éléments nécessaires au développement de microservices d'applications distribuées,Pour faciliter le passage des développeurs Spring Cloud Les modèles de programmation utilisent facilement ces composantes pour développer des services d'application distribués.
Table des matières:
Contenu partiel:
Copyright:Cet article est[Android Martin Jr.]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2021/08/20210819214148442y.html