Qu'est-ce que le sémaphore
Si le compteur est supérieur à zéro, le thread a accès à la ressource partagée, et le compteur est décrémenté, sinon, le fil n'obtiendra pas de permis et sera suspendu. Lorsque l'exécution du thread est terminée, la ressource n'est plus nécessaire et le thread le libère. La valeur de comptoir a augmenté de une fois la ressource libérée. Le thread doit d'abord obtenir la permission et doit attendre avant les ressources à acquérir. Le fil ne pourra pas partager des ressources si un compteur atteint zéro:
Maintenant, le code complet de l'exécution des threads est mentionné ci-dessous:
Importer Java.user.concurrent.*Maintenant dans le code ci-dessus, nous avons défini trois classes différentes qui sont 'Semphoreclient', 'SharedResource', et 'Semaphorethread'. En sémaphoreclient, nous avons initialisé deux fils avec une permission. Le thread T1 incrémentera le compteur lors de l'exécution tandis que le thread T2 le diminuera. La classe SharedResource est à partir d'où les threads partageront l'accès. Dans la classe SemaphoreThread, nous avons lancé le processus de verrouillage pour les threads T1 et T2, ce qui signifie que si l'un des deux threads verrouille le processus et commence à s'exécuter, l'autre doit attendre que le verrou a été publié. Maintenant, avant d'exécuter le code, vous devez d'abord vous assurer que vous avez installé l'application Java Development Kit (JDK) dans votre système d'exploitation Linux en utilisant la commande ci-dessous dans le terminal
$ sudo apt installer par défaut-jdkMaintenant, après sa vérification, vous pouvez ouvrir n'importe quel éditeur, puis écrire et enregistrer le code Java à l'intérieur comme indiqué ci-dessous.
$ nano sémaphoreclient.JavaLe code que nous avons écrit à l'intérieur du 'Semaphoreclient.Java' Le fichier est affiché ci-dessous.
Vous pouvez voir la sortie du code comme indiqué ci-dessous
La sortie montre qu'il y a deux threads; Dans la première image, le thread T1 a été exécuté, puis une fois que T1 libère le permis, le thread T2 commence à s'exécuter; Dans la deuxième image, le thread T2 a été exécuté en premier, suivi du thread T1. Cela implique que tout le fil a eu l'occasion d'abord verrouiller le processus, obligeant l'autre fil à attendre.
Conclusion
Un sémaphore est un objet Java qui est utilisé pour contrôler l'accès à une ressource partagée et c'est une méthode de synchronisation de threads qui vous permet d'envoyer des signaux à travers les threads pour gérer plusieurs tâches en même temps. Il accorde l'accès à la ressource partagée et, par conséquent, un fil doit d'abord obtenir l'autorisation du sémaphore avant d'utiliser les ressources. Dans cet article, nous avons créé deux fils A et B avec un permis. Ainsi, tous ces deux threads commenceront à exécuter et verrouiller le processus, alors l'autre thread doit attendre que le processus soit libéré.