Le modèle de cohérence de la mémoire (MCM) de Java utilise le principe du « venir en premier » pour garantir un accès cohérent à la mémoire partagée dans les programmes multithread. Le principe de préséance définit la relation séquentielle entre les opérations, y compris l'ordre du programme, le verrouillage, les variables volatiles, les variables finales et la transitivité. En pratique, les méthodes de synchronisation garantissent que les écritures dans la mémoire partagée sont visibles par les autres threads, mais elles ne garantissent pas l'atomicité. Modèle de cohérence de la mémoire dans la programmation simultanée Java
Le MCM de Java
Java utilise un MCM appelé "arrive-avant", qui spécifie l'ordre relatif des opérations de mémoire entre les threads. Le principe de préséance définit les relations de préséance suivantes :
Séquence du programme : Les opérations effectuées dans l'ordre du programme dans un thread ont des relations de préséance. Verrouillage : L'opération d'acquisition du verrou a une relation de préséance avec l'opération de déverrouillage ultérieure.
Variables volatiles : une opération d'écriture sur une variable volatile a une relation de préséance avec une opération de lecture ultérieure sur une variable volatile.
Variable finale : l'initialisation de la variable finale a une relation de préséance avec l'opération de lecture ultérieure de la variable finale. Transitivité : si A arrive avant B et B arrive avant C, alors A arrive avant C.
int x = 0; public synchronized void incrementX() { x++; } public int getX() { return x; }
x
se produit dans la méthode synchronisée incrementX()
. Cela signifie qu'une opération de lecture sur le champ x
(effectuée dans la méthode getX()
) verra toujours la dernière valeur de x
car la synchronisation garantit qu'aucun autre thread ne peut exécuter la méthode incrementX()
en même temps. Visibilité : la préséance-arrive-avant garantit que les modifications apportées à la mémoire partagée par un thread seront visibles par les autres threads.
Atomicité :les opérations de préséance se produisent avant sur la mémoire partagée ne sont pas garanties comme étant atomiques. Si des opérations atomiques sont nécessaires, des mécanismes tels que les variables synchronisées
ou atomiques
doivent être utilisés. x
字段的写操作发生在同步方法 incrementX()
中。这意味着对 x
字段的读操作(在 getX()
方法中执行)将总是看到 x
的最新值,因为同步保证了任何其他线程无法同时执行 incrementX()
方法。
重要注意事项
synchronized
或 atomic
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!