Le bloc synchronisé des fonctions Java assure la sécurité des threads en acquérant des verrous de synchronisation. Lorsqu'un thread entre dans le bloc synchronisé, les autres threads ne peuvent pas y entrer, garantissant ainsi que l'accès aux données partagées est sécurisé pour les threads. Étapes spécifiques : Déclarez une méthode ou un bloc de code synchronisé et utilisez le mot-clé synchronisé. Lorsqu'un thread entre dans un bloc synchronisé, il acquiert un verrou de synchronisation. Les autres threads ne peuvent pas accéder aux données du bloc synchronisé jusqu'à ce que le premier thread libère le verrou de synchronisation. Un bloc synchronisé contient uniquement le code qui doit être synchronisé.
Comment assurer la sécurité des threads dans les blocs synchronisés de fonctions Java ?
Les blocs synchronisés sont du sucre syntaxique utilisé pour rendre les fonctions non thread-safe thread-safe dans un environnement multithread. Il s'agit essentiellement d'un verrou mutex : lorsqu'un thread entre dans un bloc synchronisé, il acquiert le verrou synchronisé et aucun autre thread ne peut entrer dans le bloc synchronisé jusqu'à ce que ce thread libère le verrou.
Syntaxe
public synchronized void myFunc() { // 临界区代码 }
Cas pratique
Supposons que nous ayons une fonction non thread-safe increment()
qui incrémente une valeur de compteur de 1. Si plusieurs threads appellent cette fonction en même temps, la valeur du compteur peut être incorrecte. Nous pouvons utiliser des blocs synchronisés pour résoudre ce problème : increment()
,它将一个计数器值加 1。如果多个线程同时调用此函数,则计数器值可能会发生错误。我们可以使用同步块来解决这个问题:
private int counter; public synchronized void increment() { counter++; }
这样,当一个线程调用 increment()
函数时,它会获取对 counter
的独占锁。其他线程在第一个线程释放该锁之前都无法访问 counter
,从而确保对 counter
的访问是线程安全的。
需要注意的是:
synchronized
rrreeeincrement()
, il acquerra un verrou exclusif sur counter
. Aucun autre thread ne peut accéder à counter
jusqu'à ce que le premier thread libère le verrou, garantissant que l'accès à counter
est thread-safe. synchronized
pour synchroniser des méthodes ou des blocs de code, pas des classes. 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!