Qu'est-ce que Semaphore en Java et son utilisation?



Un sémaphore est utilisé pour la synchronisation des processus. Ce blog vous expliquera les différents types et implémentations de sémaphores en java.

Un sémaphore dans contrôle l'accès à une ressource partagée via un compteur. C'est un synchronisation des threads construction utilisée pour envoyer des signaux entre les threads pour éviter les signaux manqués ou protéger une section critique. Dans ce blog sur les sémaphores en Java, nous comprendrons le concept en détail.
Les sujets suivants seront traités dans ce blog:

Qu'est-ce que Semaphore en Java?

Un sémaphore est une variable utilisée pour la synchronisation des processus qui sert à gérer les processus concurrents. Il est également utilisé pour contrôler l'accès à une ressource commune par plusieurs processus simultanés et éviter une condition de concurrence.





Types de sémaphore -

  • Sémaphore binaire: Un sémaphore binaire ne prend que 0 et 1 comme valeurs et est utilisé pour implémenter l'exclusion mutuelle ainsi que pour synchroniser les processus concurrents.

    que sont les beans en java
  • Comptage du sémaphore: La valeur d'un sémaphore de comptage à tout moment indique le nombre maximum de processus qui peuvent entrer dans la section critique exactement au même moment.



Fonctionnement du sémaphore

  • Si le nombre de sémaphores> 0, le thread acquiert une autorisation, décrémentant le nombre de sémaphores.

  • Sinon, le est bloqué jusqu'à ce qu'un permis puisse être obtenu.

  • Lorsque le thread n'a plus besoin d'accéder à une ressource partagée, il libère l'autorisation, incrémentant le nombre de sémaphores.



  • Si un autre thread attend un permis, ce thread obtiendra un permis à ce moment-là.

    tutoriel informatica pour les débutants pdf téléchargement gratuit

Implémentation de Semaphore

import java.util.concurrent. * // Prendra Resource comme classe de classe partagée Resource {static int count = 0} class MyDemo extend Demo {Semaphore sem String threadName public MyDemo (Semaphore sem, String threadName) {super (threadName) this. sem = sem this.threadName = threadName} @Override public void run () {// Exécuter par X if (this.getName (). equals ('X')) {System.out.println ('Starting' + threadName) try {// Obtiendra le permis d'accéder à la ressource partagée System.out.println (threadName + 'en attente d'un permis.') // acquisition du verrou sem.acquire () System.out.println (threadName + 'obtient un permis . ') // Maintenant, l'accès à la ressource partagée et au repos attendra (int i = 0 i<7 i++) { Resource.count++ System.out.println(threadName + ': ' + Resouce.count) // Now thread Y will try to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } // run by thread Y else { System.out.println('Starting ' + threadName) try { // First, Y will try to get permit System.out.println(threadName + ' waiting for a permit.') // acquiring the lock sem.acquire() System.out.println(threadName + ' gets a permit.') // Now, accessing the shared resource and others will wait for(int i=0 i < 7 i++) { Resource.count-- System.out.println(threadName + ': ' + Resource.count) // Now, allowing a context switch -- if possible. // for thread X to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } } } public class SemTest { public static void main(String args[]) throws InterruptedException { // creating a Semaphore object // with number of permits 1 Semaphore sem = new Semaphore(1) // creating two threads with name X and Y // Here thread X will increment and Y will decrement the counter MyDemo md1 = new MyDemo(sem, 'X') MyDemo md2 = new MyDemo(sem, 'Y') // stating threads X and Y md1.start() md2.start() // waiting for threads X and Y md1.join() mtd.join() System.out.println('count: ' + Resource.count) } } 

Production-
Démarrage de X
Début Y
X en attente d'un permis
Y en attente d'un permis
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X libère le permis
Y obtient le permis
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
Et les rejets le permettent
nombre: 0

Avec cela, nous arrivons à la fin de ce blog sur les «Sémaphores en Java». Si vous souhaitez en savoir plus sur Java, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour les étudiants et les professionnels qui souhaitent devenir développeur Java. Le cours est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate & Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog «Qu'est-ce que le sémaphore en Java» et nous vous répondrons dans les plus brefs délais.