Qu'est-ce que Semaphore en Java et comment l'utiliser ?
Publié: 2022-05-26En 1995, Sun Microsystems nous a apporté Java, qui était un langage de programmation collaboratif, dépendant des classes et des objets et une plate-forme informatique. Un grand nombre de programmes et de sites Web ne fonctionneront que si vous avez installé Java, et d'autres sont développés quotidiennement. Java est commercialisé et loué pour sa rapidité, sa sécurité et sa fiabilité. Il s'agit d'un langage informatique créé spécifiquement pour être utilisé dans le monde dispersé d'Internet. Il a été conçu en gardant à l'esprit la conception du langage de programmation C++, mais il est plus facile à utiliser et applique une approche de programmation orientée objet.
Un programme exécutif PG en développement de logiciels vous enseigne exactement toutes les compétences nécessaires pour exceller en Java.
Exemple de sémaphore :
Mutex var partagé : sémaphore = 1 ;
Je traite
commencer
.
.
P(mutex);
exécuter CS ;
V(mutex);
.
.
Fin;
Qu'est-ce qui distingue Java ?
Une communauté dévouée de développeurs, d'architectes et de passionnés Java a testé, peaufiné, développé et validé Java. Malgré ses racines vieilles de près de deux décennies, Java a évolué régulièrement au fil des ans.
Java est destiné à faciliter le développement de programmes portables hautes performances pour une large gamme de systèmes informatiques, prenant ainsi en charge les notions essentielles d'accessibilité englobante et d'interaction multiplateforme. Les entreprises peuvent fournir des services supplémentaires, augmenter la productivité, la communication et la collaboration des utilisateurs finaux, et réduire considérablement le coût des applications d'entreprise et grand public en les rendant disponibles dans des environnements hétérogènes.
Qu'est-ce qu'un sémaphore en Java ?
Un sémaphore utilise un compteur pour réguler l'accès à une ressource partagée. L'accès est autorisé si le compteur est supérieur à zéro. Si la valeur est 0, l'accès est refusé. Le compteur compte les permis qui donnent accès à la ressource partagée. Par conséquent, pour accéder à la ressource, un thread doit d'abord obtenir l'autorisation du sémaphore.
Comment ça marche?
Généralement, lors de l'utilisation d'un sémaphore, le thread tentant d'accéder à la ressource partagée tente d'obtenir l'autorisation. Si le nombre de sémaphores est supérieur à zéro, le thread obtient l'autorisation, ce qui entraîne une diminution du nombre de sémaphores. Sinon, le fil sera interrompu jusqu'à ce qu'un permis soit obtenu.
Lorsque le thread n'a plus besoin d'accéder à la ressource partagée, il libère le permis, ce qui entraîne l'augmentation du nombre de sémaphores. Si un autre thread attend une autorisation, ce thread en obtiendra une à ce moment-là.
Types de sémaphore
Il existe quatre types de sémaphores en Java. Ils sont les suivants :
Sémaphore binaire :
Un sémaphore binaire n'accepte que 0 et 1 comme valeurs et est utilisé pour créer une exclusion mutuelle et synchroniser les activités concurrentes.
Exemple de sémaphore binaire :
classe publique BinarySemaphoreExample
{
booléen privé verrouillé = faux ;
BinarySemaphore(int initial)
{
verrouillé = (initiale == 0);
}
Le vide synchronisé public waitForNotify () lance InterruptedException
{
tandis que (verrouillé)
{
Attendez();
}
verrouillé = vrai ;
}
void synchronisé public notifyToWakeup()
{
si (verrouillé)
{
notifier();
}
verrouillé = faux ;
}
}
Lisez nos articles populaires liés au développement de logiciels
Comment implémenter l'abstraction de données en Java ? | Qu'est-ce que la classe interne en Java ? | Identificateurs Java : définition, syntaxe et exemples |
Comprendre l'encapsulation dans OOPS avec des exemples | Arguments de ligne de commande en C expliqués | Top 10 des fonctionnalités et caractéristiques du cloud computing en 2022 |
Polymorphisme en Java : concepts, types, caractéristiques et exemples | Packages en Java et comment les utiliser ? | Tutoriel Git pour les débutants : Apprenez Git à partir de zéro |
Sémaphore de comptage :
A chaque instant, la valeur d'un sémaphore de comptage représente le nombre maximum de processus pouvant accéder à la zone critique en même temps.
Exemple de sémaphore de comptage :
classe publique CountingSemaphoreExample
{
signal int privé = 0 ;
prise vide synchronisée publique ()
{
this.signal++;
this.notify();
}
public synchronized void release() lève InterruptedException
{
tandis que (ce.signal == 0)
Attendez();
ce.signal– ;
}
}
Sémaphore temporisé :
Les sémaphores temporisés permettent à un thread de s'exécuter pendant une durée définie. Après une certaine période, la minuterie se réinitialise et tous les autres permis sont libérés.
Exemple de sémaphore temporisé :
classe TimedSemaphoresExample
{
sémaphore privé TimedSemaphore ;
TimedSemaphoreExample(long period, int slotLimit)
{
sémaphore = new TimedSemaphore(période, TimeUnit.SECONDS, slotLimit);
}
booléen tryAdd()
{
return sémaphore.tryAcquire();
}
int availableSlots()
{
return sémaphore.getAvailablePermits();
}
}
Sémaphore borné :
Nous pouvons définir la limite supérieure en utilisant des sémaphores bornés. Il est utilisé au lieu de compter les sémaphores car ils n'ont pas de valeur limite supérieure. La valeur limite supérieure représente le nombre maximal de signaux pouvant être stockés.
Exemple de sémaphore borné :
classe publique BoundedSemaphoresExample
{
signaux int privés = 0 ;
privé int lié = 0 ;
public BoundedSemaphoreexample(int upperBound)
{
this.bound = upperBound;
}
public void synchronized take() lève InterruptedException
{
while(this.signals == lié)
Attendez();
this.signals++ ;
this.notify++ ;
}
public void synchronized release() lève InterruptedException
{
tandis que (ce.signal == 0)
Attendez();
ce.signal– ;
}
}
Explorez nos cours populaires de génie logiciel
SL. Non | Programmes de développement de logiciels | |
1 | Master of Science en informatique de LJMU & IIITB | Programme de certificat de cybersécurité Caltech CTME |
2 | Bootcamp de développement de la pile complète | Programme PG dans Blockchain |
3 | Executive Post Graduate Program in Software Development - Spécialisation DevOps | Voir tous les cours de génie logiciel |
Les caractéristiques:
Un sémaphore a les caractéristiques suivantes :
- Il permet aux threads de communiquer entre eux.
- Cela réduit le degré de synchronisation. En conséquence, il fournit une méthode de synchronisation de bas niveau.
- Il n'y a pas de valeur négative dans le sémaphore. Il a une valeur qui peut être supérieure ou égale à zéro.
- Nous pouvons implémenter le sémaphore en utilisant l'opération de test et les interruptions et l'exécuter en utilisant des descripteurs de fichiers.
Avantages et inconvénients des sémaphores :
Avantages :
- Il permet à de nombreux fils d'atteindre la partie vitale.
- Les sémaphores sont indépendants de la machine.
- Les sémaphores sont implémentés dans le code indépendant de la machine du micro-noyau.
- Plusieurs processus ne sont pas autorisés à accéder à la section cruciale.
- Il n'y a pas de perte de temps de traitement ou de ressources car il y a toujours une attente occupée dans le sémaphore.
- Ils sont indépendants de la machine et doivent donc être exécutés dans le code indépendant de la machine du micro-noyau.
- Ils permettent une gestion des ressources adaptable.
Désavantages:
- L'inversion de priorité est l'une des restrictions les plus importantes d'un sémaphore.
- Le système d'exploitation doit conserver une trace de tous les appels de sémaphores d'attente et de signalisation.
- Leur utilisation n'est jamais imposée, mais simplement par la tradition.
- Les actions Wait et Signal doivent être effectuées correctement pour éviter les interblocages dans le sémaphore.
- Parce que la programmation des sémaphores est compliquée, il y a une probabilité que l'exclusion mutuelle ne soit pas réalisée.
- Ce n'est pas non plus une stratégie réaliste pour les applications à grande échelle car elle entraîne une perte de modularité.
- Sémaphore est plus sensible aux erreurs de programmation.
- Une erreur de programmation peut entraîner un blocage ou une violation de l'exclusion mutuelle.
Comment utiliser le sémaphore comme verrou ?
Un sémaphore peut être utilisé comme un verrou en Java. Cela signifie qu'il restreint l'accès à la ressource. Pour acquérir le verrou, tout thread souhaitant accéder à la ressource verrouillée doit d'abord appeler la fonction acquiert(). Après avoir terminé le travail, le thread doit libérer le verrou en appelant la fonction release(). Gardez à l'esprit que la limite supérieure doit être définie sur 1. Un cours PG pour cadres en développement full-stack vous aidera à maîtriser toutes ces compétences.
Sommaire
Avoir une idée claire des langages de programmation comme Java est essentiel pour une carrière brillante en tant que développeur de logiciels. upGrad propose plusieurs cours qui pourraient bien vous donner le bon coup de pouce pour une carrière prometteuse. Une spécialisation en développement Full-stack de l'Université Purude à upGrad vous enseignera toutes les compétences dont vous avez besoin pour vous épanouir dans le domaine du développement de logiciels.
Apprenez des cours de développement de logiciels en ligne dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.
Pourquoi avons-nous besoin de Semaphore en Java ?
Un sémaphore est une variable utilisée pour la synchronisation des processus afin de gérer les processus concurrents. Il empêche également un problème de concurrence en contrôlant l'accès à une ressource partagée par plusieurs processus simultanés.
Pourquoi avons-nous besoin de compter le sémaphore?
Les sémaphores sont souvent utilisés pour coordonner l'accès aux ressources, le nombre de sémaphores étant défini sur la liste des ressources totales. Lorsque des ressources sont données ou ajoutées, les threads augmentent le nombre de manière atomique, et lorsque les ressources sont retirées, les threads réduisent le nombre de manière atomique.
Pourquoi Semaphore est-il connu comme outil de synchronisation ?
Le sémaphore est essentiellement une variable entière partagée par de nombreux threads. Cette variable est utilisée dans l'environnement multitraitement pour surmonter le problème de la section critique et établir la synchronisation des processus. Ceci est parfois appelé un verrou mutex.
Qu'est-ce que le développement full-stack ?
Le développement full-stack est la création des composants front-end (côté client) et back-end (côté serveur) d'une application Web. Les développeurs Web full-stack peuvent créer des applications et des sites Web en ligne à part entière. Ils sont responsables du frontend, du backend, de la base de données et du débogage des applications en ligne ou des sites Web.