Ce este semafor în Java și utilizarea sa?



Pentru sincronizarea proceselor se utilizează un semafor. Acest blog vă va prezenta prin diferite tipuri și implementarea semaforelor în java.

Un semafor în controlează accesul la o resursă partajată printr-un contor. Este un sincronizarea firului construcție utilizată pentru a trimite semnale între fire pentru a evita semnalele ratate sau pentru a proteja o secțiune critică. În acest blog despre Semaphores în Java, vom înțelege conceptul în detaliu.
Următoarele subiecte vor fi tratate în acest blog:

Ce este Semaphore în Java?

Un semafor este o variabilă utilizată pentru sincronizarea proceselor care este utilizată pentru gestionarea proceselor concurente. Este, de asemenea, utilizat pentru a controla accesul la o resursă comună prin mai multe procese simultane și pentru a evita o condiție de cursă.





Tipuri de semafor -

  • Semafor binar: Un semafor binar ia doar 0 și 1 ca valori și este utilizat pentru a implementa excluderea reciprocă, precum și pentru a sincroniza procesele concurente.

    setarea căii clasei pentru java
  • Semafor de numărare: Valoarea unui semafor de numărare în orice punct indică numărul maxim de procese care pot intra în secțiunea critică în același timp.



Lucrarea semaforului

  • Dacă numărul semaforului este> 0, firul obține un permis, decrementând numărul semaforului.

    ce este alert în javascript
  • Altfel, este blocat până la obținerea unui permis.

  • Atunci când firul nu mai are nevoie de acces la o resursă partajată, eliberează permisul, incrementând numărul semaforului.



  • Dacă un alt fir așteaptă un permis, atunci acel fir va dobândi un permis în acel moment.

Implementarea semaforului

import java.util.concurrent. * // Va lua Resource ca clasă de clasă partajată Resource {static int count = 0} class MyDemo extinde Demo {Semaphore sem String threadName public MyDemo (Semaphore sem, String threadName) {super (threadName) this. sem = sem this.threadName = threadName} @Override public void run () {// Run By X if (this.getName (). equals ('X')) {System.out.println ('Start' + threadName) încercați {// Va obține permisul pentru a accesa resursa partajată System.out.println (threadName + 'în așteptarea unui permis.') // obținerea blocării sem.acquire () System.out.println (threadName + 'primește un permis . ') // Acum, accesarea resursei partajate și restul vor aștepta (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) } } 

Ieșire-
Începând cu X
Începând cu Y
X aștept un permis
Aștept un permis
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X eliberează permisul
Y primește permisul
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
Și eliberează permisul
număr: 0

cadru bazat pe date în seleniu webdriver

Cu aceasta, ajungem la sfârșitul acestui blog despre „Semaforele în Java”. Dacă doriți să aflați mai multe despre Java, consultați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru studenți și profesioniști care doresc să fie dezvoltator Java. Cursul este conceput pentru a vă oferi un început important în programarea Java și pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog „Ce este semafor în Java” și vă vom contacta cât mai curând posibil.