Maison > Java > javaDidacticiel > L'utilisation et le principe du mot-clé synchronisé dans la programmation parallèle Java

L'utilisation et le principe du mot-clé synchronisé dans la programmation parallèle Java

WBOY
Libérer: 2024-04-18 13:21:01
original
1190 Les gens l'ont consulté

Le mot-clé synchronisé en Java réalise la synchronisation en acquérant des verrous d'objet pour empêcher la concurrence de données provoquée par plusieurs threads accédant simultanément à des ressources partagées. Son utilisation inclut des méthodes synchronisées et des blocs de code synchronisés, où cela représente l'objet actuel.

Lutilisation et le principe du mot-clé synchronisé dans la programmation parallèle Java

Le mot-clé synchronisé dans la programmation parallèle Java

Principe

Le mot-clé synchronized est utilisé pour synchroniser l'accès aux ressources partagées et empêcher la concurrence de données causée par plusieurs threads accédant à la même ressource en même temps . question. Il réalise la synchronisation en acquérant un verrou (moniteur). Lorsqu'un thread acquiert le verrou, les autres threads doivent attendre que le verrou soit libéré avant de pouvoir continuer l'exécution. synchronized关键字用于同步对共享资源的访问,防止多个线程同时访问同一个资源导致的数据竞争问题。它通过获取锁 (monitor) 来实现同步。当一个线程获得锁后,其他线程则需要等待,直到锁被释放才能继续执行。

锁与对象相关联,当一个线程对一个对象加锁时,其他线程不能对该对象加锁。

使用方式

synchronized 有两种使用方式:

  1. 同步方法
public synchronized void myMethod() {
    // 同步代码块
}
Copier après la connexion
  1. 同步代码块
public void myMethod() {
    synchronized (this) {
        // 同步代码块
    }
}
Copier après la connexion

其中,this 表示当前对象。

实战案例

以下是一个线程不安全的计数器类:

public class UnsafeCounter {
    private int count = 0;

    public void increment() {
        count++;
    }
}
Copier après la connexion

如果多个线程同时调用 increment() 方法,可能会导致 count 值不准确。为了解决这个问题,我们可以使用 synchronizedincrement() 方法进行同步:

public class SafeCounter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }
}
Copier après la connexion

现在,多个线程可以安全地调用 increment() 方法,因为该方法被 synchronized

Les verrous sont associés à des objets. Lorsqu'un thread verrouille un objet, les autres threads ne peuvent pas verrouiller l'objet. 🎜🎜Comment utiliser🎜🎜synchronisé a deux façons d'utiliser : 🎜
  1. Méthode synchronisée
rrreee
  1. Bloc de code synchronisé
rrreee🎜Parmi eux, this représente l'objet actuel. 🎜🎜Cas pratique🎜🎜Ce qui suit est une classe de compteur non sécurisée pour les threads : 🎜rrreee🎜Si plusieurs threads appellent la méthode increment() en même temps, cela peut provoquer le count code> valeur non valide et précise. Pour résoudre ce problème, nous pouvons utiliser <code>synchronized pour synchroniser la méthode increment() : 🎜rrreee🎜Maintenant, plusieurs threads peuvent appeler en toute sécurité increment() car cette méthode est protégée par le mot-clé <code>synchronized. 🎜

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal