Le multithreading a trois caractéristiques majeures, à savoir :
Atomicité, visibilité, ordre
1 Qu'est-ce qu'un atome ?
signifie qu'une ou plusieurs opérations sont soit entièrement exécutées et que le processus d'exécution ne sera interrompu par aucun facteur, soit qu'elles ne sont pas exécutées du tout.
Un exemple très classique est le problème du transfert de compte bancaire :
Par exemple, si vous transférez 1 000 yuans du compte A vers le compte B, cela doit comprendre deux opérations : soustraire 1 000 yuans du compte A , et virement sur le compte A. Le compte B ajoute 1 000 yuans. Ces deux opérations doivent être atomiques pour garantir qu'aucun problème inattendu ne se produise.
La même chose est vraie lorsque nous exploitons des données, telles que i = i+1 ; ce qui inclut la lecture de la valeur de i, le calcul de i et l'écriture de i. Cette ligne de code n'est pas atomique en Java, donc le fonctionnement multithread posera certainement des problèmes, nous devons donc également utiliser la synchronisation et le verrouillage pour garantir cette fonctionnalité.
(Tutoriel vidéo recommandé : vidéo Java )
2. Qu'est-ce que la visibilité
Quand plusieurs fils de discussion accèdent au même Quand une variable est modifiée et un thread modifie la valeur de la variable, les autres threads peuvent immédiatement voir la valeur modifiée.
Si les deux threads sont sur des processeurs différents, alors le thread 1 change la valeur de i et ne l'a pas actualisé dans la mémoire principale, et le thread 2 utilise à nouveau i, alors la valeur i doit toujours être la même que avant. Le thread 1 a une paire de variables. La modification que le thread 2 n'a pas vue était un problème de visibilité.
3. Qu'est-ce que l'ordre ?
L'ordre d'exécution du programme est exécuté dans l'ordre du code.
D'une manière générale, afin d'améliorer l'efficacité du fonctionnement du programme, le processeur peut optimiser le code d'entrée. Il ne garantit pas que l'ordre d'exécution de chaque instruction du programme est cohérent avec l'ordre du code, mais cela garantira que le programme est finalement exécuté. Le résultat est cohérent avec le résultat de l'exécution séquentielle du code. Comme suit :
int a = 10; //语句1 int r = 2; //语句2 a = a + 3; //语句3 r = a*a; //语句4
En raison d'un réordonnancement, il peut également exécuter l'ordre 2-1-3-4, 1-3-2-4, mais il est absolument impossible de 2-1-4-3, parce que ces dépendances sont rompues.
Évidemment, la réorganisation ne posera aucun problème pour un fonctionnement monothread, mais pas nécessairement pour le multi-threading, nous devons donc considérer ce problème lors de la programmation avec multi-threading.
Tutoriel recommandé : Démarrer avec Java
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!