Was ist Semaphore in Java und wie wird es verwendet?
Veröffentlicht: 2022-05-26Sun Microsystems brachte uns 1995 Java, eine kollaborative, klassen- und objektabhängige Programmiersprache und eine Computerplattform. Eine große Anzahl von Programmen und Websites funktioniert nicht, wenn Sie Java nicht installiert haben, und es werden täglich mehr entwickelt. Java wird für seine schnelle Geschwindigkeit, Sicherheit und Zuverlässigkeit vermarktet und gelobt. Es ist eine Computersprache, die speziell für den Einsatz in der zerstreuten Welt des Internets entwickelt wurde. Es wurde unter Berücksichtigung des Designs der Programmiersprache C++ erstellt, ist jedoch einfacher zu verwenden und erzwingt einen objektorientierten Programmieransatz.
Ein Executive PG-Programm in Softwareentwicklung vermittelt Ihnen genau alle Fähigkeiten, die Sie benötigen, um sich in Java hervorzuheben.
Beispiel für ein Semaphor:
Shared var Mutex: Semaphore = 1;
Prozess i
Start
.
.
P(Mutex);
CS ausführen;
V(Mutex);
.
.
Ende;
Was zeichnet Java aus?
Eine hingebungsvolle Gemeinschaft von Java-Entwicklern, -Architekten und -Enthusiasten hat Java getestet, poliert, erweitert und validiert. Trotz seiner fast zwei Jahrzehnte alten Wurzeln hat sich Java im Laufe der Jahre stetig weiterentwickelt.
Java soll die Entwicklung portabler, hochleistungsfähiger Programme für eine breite Palette von Computersystemen erleichtern und damit die wesentlichen Vorstellungen von umfassender Zugänglichkeit und plattformübergreifender Interaktion unterstützen. Unternehmen können zusätzliche Dienste bereitstellen, die Produktivität, Kommunikation und Zusammenarbeit der Endbenutzer steigern und die Kosten für Unternehmens- und Verbraucheranwendungen drastisch senken, indem sie sie in heterogenen Umgebungen verfügbar machen.
Was ist Semaphore in Java?
Ein Semaphor verwendet einen Zähler, um den Zugriff auf eine gemeinsam genutzte Ressource zu regulieren. Der Zugriff wird erlaubt, wenn der Zähler größer Null ist. Wenn der Wert 0 ist, wird der Zugriff verweigert. Der Zähler zählt Genehmigungen, die Zugriff auf die gemeinsam genutzte Ressource gewähren. Um auf die Ressource zuzugreifen, muss ein Thread daher zuerst die Erlaubnis von der Semaphore erhalten.
Wie funktioniert es?
Im Allgemeinen versucht der Thread, der versucht, auf die gemeinsam genutzte Ressource zuzugreifen, während er eine Semaphore verwendet, eine Erlaubnis zu erhalten. Wenn die Anzahl der Semaphoren größer als Null ist, erhält der Thread die Erlaubnis, wodurch die Anzahl der Semaphoren verringert wird. Wenn nicht, wird der Thread angehalten, bis eine Genehmigung erhalten wird.
Wenn der Thread keinen Zugriff mehr auf die gemeinsam genutzte Ressource benötigt, gibt er die Genehmigung frei, wodurch die Anzahl der Semaphoren erhöht wird. Wenn ein anderer Thread auf die Erlaubnis wartet, erhält dieser Thread in diesem Moment eine.
Arten von Semaphoren
Es gibt vier Arten von Semaphoren in Java. Sie sind wie folgt:
Binäre Semaphore :
Ein binäres Semaphor akzeptiert nur 0 und 1 als Werte und wird verwendet, um gegenseitigen Ausschluss zu erzeugen und gleichzeitige Aktivitäten zu synchronisieren.
Beispiel für binäre Semaphore:
öffentliche Klasse BinarySemaphoreExample
{
privater boolescher Wert gesperrt = falsch;
BinarySemaphore(int initial)
{
gesperrt = (anfänglich == 0);
}
öffentlich synchronisiert void waitForNotify() löst InterruptedException aus
{
während (gesperrt)
{
Warten();
}
gesperrt = wahr;
}
öffentliches synchronisiertes Void-notifyToWakeup()
{
wenn (gesperrt)
{
benachrichtigen();
}
gesperrt = falsch;
}
}
Lesen Sie unsere beliebten Artikel zur Softwareentwicklung
Wie implementiert man Datenabstraktion in Java? | Was ist die innere Klasse in Java? | Java-Identifikatoren: Definition, Syntax und Beispiele |
Verstehen der Kapselung in OOPS mit Beispielen | Befehlszeilenargumente in C erklärt | Top 10 Merkmale und Merkmale von Cloud Computing im Jahr 2022 |
Polymorphismus in Java: Konzepte, Typen, Eigenschaften und Beispiele | Pakete in Java und wie man sie benutzt? | Git-Tutorial für Anfänger: Lernen Sie Git von Grund auf neu |
Zählsemaphor :
Der Wert eines Zählsemaphors stellt zu jedem Zeitpunkt die maximale Anzahl von Prozessen dar, die gleichzeitig auf den kritischen Bereich zugreifen können.
Beispiel für Zählsemaphor:
öffentliche Klasse CountingSemaphoreExample
{
privates int-Signal = 0;
öffentliches synchronisiertes void take()
{
this.signal++;
this.notify();
}
Public Synchronized Void Release() löst InterruptedException aus
{
während (dieses.signal == 0)
Warten();
dieses.signal–;
}
}
Zeitgesteuerte Semaphore:
Zeitgesteuerte Semaphore ermöglichen es einem Thread, für eine festgelegte Zeitspanne zu laufen. Nach einer bestimmten Zeit wird der Timer zurückgesetzt und alle anderen Genehmigungen werden freigegeben.
Beispiel für eine zeitgesteuerte Semaphore:
Klasse TimedSemaphoresExample
{
private TimedSemaphore-Semaphore;
TimedSemaphoreExample(langer Zeitraum, int slotLimit)
{
semaphore = new TimedSemaphore(period, TimeUnit.SECONDS, slotLimit);
}
boolean tryAdd()
{
Rückgabe semaphore.tryAcquire();
}
int verfügbareSlots()
{
Rückgabe semaphore.getAvailablePermits();
}
}
Begrenzte Semaphore :
Wir können die Obergrenze unter Verwendung von begrenzten Semaphoren festlegen. Es wird anstelle des Zählens von Semaphoren verwendet, da sie keinen oberen Grenzwert haben. Der obere Grenzwert stellt die maximale Anzahl von Signalen dar, die gespeichert werden können.
Beispiel für ein begrenztes Semaphor :
öffentliche Klasse BoundedSemaphoresExample
{
private int-Signale = 0;
private int-Grenze = 0;
public BoundedSemaphoreexample(int upperBound)
{
this.bound = obere Grenze;
}
Public Void Synchronized Take() löst InterruptedException aus
{
while(this.signale == gebunden)
Warten();
this.signale ++;
this.notify++;
}
public void synced release() löst InterruptedException aus
{
während (dieses.signal == 0)
Warten();
this.signals–;
}
}
Erkunden Sie unsere beliebten Softwareentwicklungskurse
SL. Nein | Softwareentwicklungsprogramme | |
1 | Master of Science in Informatik von LJMU & IIITB | Caltech CTME Cybersecurity-Zertifikatsprogramm |
2 | Full-Stack-Entwicklungs-Bootcamp | PG-Programm in Blockchain |
3 | Executive Post Graduate Program in Softwareentwicklung - Spezialisierung auf DevOps | Alle Softwareentwicklungskurse anzeigen |
Eigenschaften:
Eine Semaphore hat folgende Eigenschaften:
- Es ermöglicht Threads, miteinander zu kommunizieren.
- Es verringert den Grad der Synchronität. Als Ergebnis stellt es ein Synchronisationsverfahren auf niedriger Ebene bereit.
- Es gibt keinen negativen Wert in der Semaphore. Es hat einen Wert, der größer oder gleich Null sein kann.
- Wir können Semaphore mithilfe der Testoperation und Interrupts implementieren und mithilfe von Dateideskriptoren ausführen.
Vor- und Nachteile von Semaphoren:
Vorteile:
- Es ermöglicht vielen Fäden, den entscheidenden Teil zu erreichen.
- Semaphoren sind maschinenunabhängig.
- Semaphoren sind im maschinenunabhängigen Code des Mikrokernels implementiert.
- Mehrere Prozesse dürfen nicht auf den entscheidenden Abschnitt zugreifen.
- Es gibt keine Verschwendung von Prozesszeit oder Ressourcen, da es immer ein beschäftigtes Warten in der Semaphore gibt.
- Sie sind maschinenunabhängig und sollten daher im maschinenunabhängigen Code des Mikrokernels ausgeführt werden.
- Sie ermöglichen ein anpassungsfähiges Ressourcenmanagement.
Nachteile:
- Die Prioritätsumkehr ist eine der wichtigsten Einschränkungen eines Semaphors.
- Das Betriebssystem muss alle Warte- und Signalsemaphoraufrufe verfolgen.
- Ihre Verwendung ist nie vorgeschrieben, sondern einfach aus Tradition.
- Warte- und Signalaktionen müssen korrekt ausgeführt werden, um Deadlocks im Semaphor zu vermeiden.
- Da die Semaphor-Programmierung kompliziert ist, besteht die Wahrscheinlichkeit, dass ein gegenseitiger Ausschluss nicht erreicht werden kann.
- Es ist auch keine realistische Strategie für Anwendungen im großen Maßstab, da es zu einem Verlust an Modularität führt.
- Semaphore ist anfälliger für Programmierfehler.
- Ein Programmierfehler kann zu einem Deadlock oder einer Verletzung des gegenseitigen Ausschlusses führen.
Wie verwende ich Semaphore als Sperre?
Ein Semaphor kann als Sperre in Java verwendet werden. Es bedeutet, dass es den Zugriff auf die Ressource einschränkt. Um die Sperre zu erwerben, muss jeder Thread, der auf die gesperrte Ressource zugreifen möchte, zuerst die Funktion „acquire()“ aufrufen. Nach Abschluss der Arbeit muss der Thread die Sperre freigeben, indem er die Funktion release() aufruft. Denken Sie daran, dass die Obergrenze auf 1 gesetzt werden sollte. Ein PG-Kurs für Führungskräfte in Full-Stack-Entwicklung wird Ihnen helfen, all diese Fähigkeiten zu meistern.
Zusammenfassung
Eine klare Vorstellung von Programmiersprachen wie Java ist für eine glänzende Karriere als Softwareentwickler unerlässlich. upGrad bietet mehrere Kurse, die Ihnen vielleicht den richtigen Kick für eine vielversprechende Karriere geben. Eine Spezialisierung auf Full-Stack-Entwicklung von der Purude University bei upGrad vermittelt Ihnen alle Fähigkeiten, die Sie benötigen, um im Bereich der Softwareentwicklung erfolgreich zu sein.
Lernen Sie Softwareentwicklungskurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.
Warum brauchen wir Semaphore in Java?
Ein Semaphor ist eine Variable, die für die Prozesssynchronisierung verwendet wird, um gleichzeitige Prozesse zu verwalten. Es verhindert auch ein Race-Problem, indem es den Zugriff auf eine gemeinsam genutzte Ressource durch mehrere gleichzeitige Prozesse steuert.
Warum brauchen wir Zählsemaphore?
Semaphore werden häufig verwendet, um den Ressourcenzugriff zu koordinieren, wobei die Anzahl der Semaphore auf die Liste der Gesamtressourcen gesetzt wird. Wenn Ressourcen gegeben oder hinzugefügt werden, erhöhen Threads die Anzahl atomar, und wenn Ressourcen zurückgezogen werden, reduzieren Threads die Anzahl atomar.
Warum ist Semaphore als Synchronisationstool bekannt?
Semaphore ist im Wesentlichen eine ganzzahlige Variable, die von vielen Threads gemeinsam genutzt wird. Diese Variable wird in der Multiprozessorumgebung verwendet, um das Problem des kritischen Abschnitts zu überwinden und eine Prozesssynchronisation herzustellen. Dies wird manchmal als Mutex-Sperre bezeichnet.
Was ist Full-Stack-Entwicklung?
Full-Stack-Entwicklung ist die Erstellung sowohl der Front-End- (clientseitig) als auch der Back-end- (serverseitigen) Komponenten einer Webanwendung. Full-Stack-Webentwickler können vollwertige Online-Anwendungen und Websites erstellen. Sie sind verantwortlich für Frontend, Backend, Datenbank und Debugging von Online-Anwendungen oder Websites.