Co je Semaphore v Javě a jeho použití?



Pro synchronizaci procesů se používá semafor. Tento blog vás provede různými typy a implementací semaforů v Javě.

Semafor v řídí přístup ke sdílenému prostředku pomocí čítače. Je to synchronizace vláken konstrukce používaná k odesílání signálů mezi vlákny, aby se zabránilo zmeškaným signálům nebo chránilo kritický úsek V tomto blogu o Semaphores v Javě budeme konceptu podrobně rozumět.
V tomto blogu se budeme zabývat následujícími tématy:

Co je Semafor v Javě?

Semafor je proměnná používaná pro synchronizaci procesů, která se používá pro správu souběžných procesů. Používá se také k řízení přístupu ke společnému prostředku více souběžnými procesy a k vyhnutí se sporům.





Druhy semaforu -

  • Binární semafor: Binární semafor má pouze hodnoty 0 a 1 a používá se k implementaci vzájemného vyloučení a synchronizaci souběžných procesů.

  • Počítání semaforu: Hodnota semaforu pro počítání v kterémkoli bodě označuje maximální počet procesů, které mohou vstoupit do kritické sekce ve stejnou dobu.



    co je cloud služeb salesforce

Práce ze semaforu

  • Pokud počet semaforů> 0, vlákno získá povolení a sníží počet semaforů.

  • Jinak je blokováno, dokud nebude možné získat povolení.

  • Když vlákno již nepotřebuje přístup ke sdílenému prostředku, uvolní povolení a zvýší počet semaforů.



    cast double na int java
  • Pokud jiné vlákno čeká na povolení, pak toto vlákno v té době získá povolení.

Implementace semaforu

import java.util.concurrent. * // Vezme Resource jako třídu sdílené třídy Resource {static int count = 0} class MyDemo extends Demo {Semaphore sem String threadName public MyDemo (Semaphore sem, String threadName) {super (threadName) this. sem = sem this.threadName = threadName} @Override public void run () {// Spustit X if (this.getName (). equals ('X')) {System.out.println ('Starting' + threadName) zkuste {// Získám povolení k přístupu ke sdílenému prostředku System.out.println (threadName + 'čekající na povolení.') // získání zámku sem.acquire () System.out.println (threadName + 'získá povolení . ') // Nyní bude přístup ke sdílenému prostředku a odpočinku čekat na (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) } } 

Výstup-
Počínaje X
Počínaje Y
X čeká na povolení
Y čeká na povolení
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X uvolňuje povolení
Y dostane povolení
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
A uvolnění povolení
počet: 0

S tímto se dostáváme na konec tohoto blogu o „Semaforech v Javě“. Pokud se chcete o Javě dozvědět více, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Školicí a certifikační kurz Edureka Java J2EE a SOA je určen pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými jávskými rámci, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto blogu „Co je Semaphore v Javě“ a my se vám ozveme co nejdříve.