Maison > Java > javaDidacticiel > Comment utiliser les verrous et les synchroniseurs dans la programmation simultanée Java ?

Comment utiliser les verrous et les synchroniseurs dans la programmation simultanée Java ?

PHPz
Libérer: 2024-05-08 22:06:02
original
907 Les gens l'ont consulté

Java fournit des verrous et des synchroniseurs pour gérer l'accès aux ressources partagées. Les verrous tels que ReentrantLock permettent à un seul thread d'accéder à une section critique à la fois, tandis que les synchroniseurs tels que Semaphore et CountDownLatch offrent un contrôle de concurrence plus flexible, comme limiter le nombre de threads accédant simultanément à une ressource ou attendre que tous les threads terminent leurs tâches. . L’utilisation de ces mécanismes peut efficacement éviter les courses aux données et améliorer les performances des applications.

Java 并发编程中如何使用锁和同步器?

Verrous et synchroniseurs dans la programmation simultanée Java

La programmation simultanée permet à plusieurs threads de s'exécuter simultanément, mais nécessite des mécanismes pour gérer l'accès aux ressources partagées. Java fournit divers verrous et synchroniseurs pour y parvenir.

Verrous

Les verrous permettent à un seul thread d'accéder à la section critique (partie modifiée d'une ressource partagée) à la fois. Les verrous couramment utilisés sont :

// 创建一个 ReentrantLock
Lock lock = new ReentrantLock();

// 获取锁
lock.lock();

// 访问临界区
// ...

// 释放锁
lock.unlock();
Copier après la connexion

Synchronizer

Les synchroniseurs sont plus avancés que les verrous et offrent un contrôle de concurrence plus flexible. Les synchroniseurs couramment utilisés sont :

Semaphore

Semaphore limite le nombre de threads pouvant accéder aux ressources en même temps.

// 创建一个 Semaphore,允许最多 3 个线程同时访问
Semaphore semaphore = new Semaphore(3);

// 申请许可证
semaphore.acquire();

// 访问临界区
// ...

// 释放许可证
semaphore.release();
Copier après la connexion

CountDownLatch

CountDownLatch attend que tous les threads terminent leurs tâches avant de continuer.

// 创建一个 CountDownLatch,等待 10 个线程完成
CountDownLatch latch = new CountDownLatch(10);

// 10 个线程执行任务
// ...

// 每个线程完成后,计数器减一
latch.countDown();

// 主线程等待所有线程完成
latch.await();
Copier après la connexion

Cas pratique

Ce qui suit est un cas pratique de fonctionnement d'un compte bancaire, utilisant Sémaphore pour limiter le nombre de threads accédant au compte en même temps :

class BankAccount {
    private Semaphore semaphore = new Semaphore(1);
    private double balance;

    public void deposit(double amount) {
        try {
            semaphore.acquire();
            balance += amount;
        } finally {
            semaphore.release();
        }
    }

    public void withdraw(double amount) {
        try {
            semaphore.acquire();
            balance -= amount;
        } finally {
            semaphore.release();
        }
    }
}
Copier après la connexion

Conclusion

Les verrous et synchroniseurs sont utilisés pour gérer l'accès aux ressources partagées dans un outil puissant de programmation simultanée Java. En utilisant ces mécanismes avec précaution, vous pouvez efficacement éviter les courses aux données et améliorer les performances des programmes.

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