Ce este Semaphore în Java și cum să-l folosești?

Publicat: 2022-05-26

Sun Microsystems în 1995 ne-a adus Java, care era un limbaj de programare colaborativ, dependent de clasă și obiect și o platformă de computer. Un număr masiv de programe și site-uri web nu va funcționa decât dacă aveți Java instalat, iar mai multe sunt dezvoltate în fiecare zi. Java este comercializat și lăudat pentru viteza, securitatea și fiabilitatea sa rapidă. Este un limbaj de calculator creat special pentru a fi utilizat în lumea dispersată a Internetului. A fost realizat ținând cont de designul limbajului de programare C++, dar este mai ușor de utilizat și impune o abordare de programare orientată pe obiecte.

Un program executiv PG în Dezvoltare software vă învață exact toate abilitățile necesare pentru a excela în Java.

Exemplu de semafor:

Var mutex partajat: semafor = 1;

Procesul i

ÎNCEPE

.

.

P(mutex);

executa CS;

V(mutex);

.

.

Sfârşit;

Cuprins

Ce face ca Java să iasă în evidență?

O comunitate devotată de dezvoltatori, arhitecți și entuziaști Java a testat, șlefuit, extins și validat Java. În ciuda rădăcinilor sale de aproape două decenii, Java a evoluat constant de-a lungul anilor.

Java este destinat să faciliteze dezvoltarea de programe portabile, de înaltă performanță, pentru o gamă largă de sisteme informatice, susținând astfel noțiunile esențiale de a cuprinde accesibilitatea și interacțiunea multiplatformă. Companiile pot oferi servicii suplimentare, pot crește productivitatea utilizatorilor finali, comunicarea și colaborarea și pot reduce drastic costurile aplicațiilor pentru întreprinderi și consumatori, făcându-le disponibile în setări eterogene.

Ce este Semaforul în Java?

Un semafor folosește un contor pentru a regla accesul la o resursă partajată. Accesul este permis dacă contorul este mai mare decât zero. Dacă valoarea este 0, accesul este refuzat. Contorul numără permisele care oferă acces la resursa partajată. Drept urmare, pentru a accesa resursa, un fir de execuție trebuie să obțină mai întâi permisiunea de la semafor.

Cum functioneazã?

În general, în timp ce folosește un semafor, firul care încearcă să acceseze resursa partajată încearcă să obțină permisiunea. Dacă numărul de semafori este mai mare decât zero, firul de execuție obține permisiunea, ceea ce duce la scăderea numărului de semafori. Dacă nu, firul va fi oprit până la obținerea unui permis.

Când firul de execuție nu mai necesită acces la resursa partajată, eliberează permisul, determinând creșterea numărului de semafori. Dacă un alt thread așteaptă permisiunea, acel thread va primi unul în acel moment.

Tipuri de semafor

Există patru tipuri de semafor în Java. Acestea sunt după cum urmează:

Semafor binar :

Un semafor binar acceptă doar 0 și 1 ca valori și este folosit pentru a crea excluderea reciprocă și pentru a sincroniza activitățile concurente.

Exemplu de semafor binar:

clasă publică BinarySemaphoreExample

{

private boolean blocat = fals;

BinarySemaphore(int initial)

{

blocat = (inițial == 0);

}

public synchronized void waitForNotify() aruncă InterruptedException

{

în timp ce (blocat)

{

aștepta();

}

blocat = adevărat;

}

public sincronizat void notifyToWakeup()

{

dacă (blocat)

{

notifica();

}

blocat = fals;

}

}

Citiți articolele noastre populare legate de dezvoltarea software

Cum se implementează abstracția datelor în Java? Ce este clasa interioară în Java? Identificatori Java: definiție, sintaxă și exemple
Înțelegerea încapsulării în OOPS cu exemple Argumentele liniei de comandă în C explicate Top 10 caracteristici și caracteristici ale cloud computing în 2022
Polimorfismul în Java: concepte, tipuri, caracteristici și exemple Pachete în Java și cum să le folosiți? Tutorial Git pentru începători: Învață Git de la zero

Semafor de numărare :

În fiecare moment, valoarea unui semafor de numărare reprezintă numărul maxim de procese care pot accesa zona critică în același timp.

Exemplu de numărare a semaforului:

clasă publică CountingSemaphoreExample

{

semnal int privat = 0;

void take() sincronizat public

{

aceasta.semnal++;

this.notify();

}

public synchronized void release() aruncă InterruptedException

{

în timp ce(acest.semnal == 0)

aștepta();

acest.semnal–;

}

}

Semafor cronometrat:

Semaforele cronometrate permit rularea unui fir pentru o anumită perioadă de timp. După o anumită perioadă, cronometrul se resetează și toate celelalte permise sunt eliberate.

Exemplu de semafor temporizat:

clasa TimedSemaphoresExample

{

semafor privat TimedSemaphore;

TimedSemaphoreExample (perioadă lungă, int slotLimit)

{

semafor = new TimedSemaphore(perioada, TimeUnit.SECONDS, slotLimit);

}

boolean tryAdd()

{

returnează semafor.tryAcquire();

}

int sloturi disponibile()

{

returnează semafor.getAvailablePermits();

}

}

Semafor delimitat :

Putem stabili limita superioară folosind semafore mărginite. Este folosit în loc de numărare a semaforelor, deoarece nu au o valoare limită superioară. Valoarea limită superioară reprezintă numărul maxim de semnale care pot fi stocate.

Exemplu de semafor delimitat :

clasă publică BoundedSemaphoresExample

{

semnale int private = 0;

private int bound = 0;

public BoundedSemaphoreexample(int upperBound)

{

this.bound = upperBound;

}

public void synchronized take() aruncă InterruptedException

{

while(this.signals == legat)

aștepta();

aceasta.semnale++;

this.notify++;

}

public void synchronized release() aruncă InterruptedException

{

în timp ce(acest.semnal == 0)

aștepta();

aceasta.semnale–;

}

}

Explorați cursurile noastre populare de inginerie software

SL. Nu Programe de dezvoltare software
1 Master în Informatică de la LJMU și IIITB Programul de certificat de securitate cibernetică Caltech CTME
2 Bootcamp de dezvoltare completă Programul PG în Blockchain
3 Program Executive Postuniversitar în Dezvoltare Software - Specializare în DevOps Vezi toate cursurile de Inginerie software

Caracteristici:

Un semafor are următoarele caracteristici:

  • Permite firelor să comunice între ele.
  • Reduce gradul de sincronie. Ca rezultat, oferă o metodă de sincronizare la nivel scăzut.
  • Nu există o valoare negativă în semafor. Are o valoare care poate fi mai mare sau egală cu zero.
  • Putem implementa semaforul folosind operația de testare și întreruperi și îl putem executa folosind descriptori de fișiere.

Avantaje și dezavantaje ale Semaforelor:

Avantaje:

  1. Permite multor fire să ajungă la partea vitală.
  2. Semaforele sunt agnostice de mașină.
  3. Semaforele sunt implementate în codul independent de mașină al microkernelului.
  4. Procesele multiple nu au voie să acceseze secțiunea crucială.
  5. Nu există pierderi de timp sau resurse de proces, deoarece există întotdeauna o așteptare ocupată în semafor.
  6. Sunt independente de mașină și, prin urmare, ar trebui să fie rulate în codul independent de mașină al microkernelului.
  7. Acestea permit gestionarea resurselor care este adaptabilă.

Dezavantaje:

  1. Inversarea priorității este una dintre cele mai semnificative restricții ale unui semafor.
  2. Sistemul de operare trebuie să țină evidența tuturor apelurilor de semafor de așteptare și semnal.
  3. Utilizarea lor nu este niciodată impusă, ci pur și simplu prin tradiție.
  4. Acțiunile de așteptare și semnal trebuie efectuate corect pentru a evita blocajele în semafor.
  5. Deoarece programarea semaforelor este complicată, există probabilitatea ca excluderea reciprocă să nu fie realizată.
  6. De asemenea, nu este o strategie realistă pentru aplicațiile la scară largă, deoarece are ca rezultat o pierdere a modularității.
  7. Semaforul este mai susceptibil la erori de programare.
  8. O greșeală de programare poate duce la un blocaj sau o încălcare a excluderii reciproce.

Cum se utilizează Semaphore ca blocare?

Un semafor poate fi folosit ca blocare în Java. Aceasta înseamnă că restricționează accesul la resursă. Pentru a obține blocarea, orice fir care dorește să acceseze resursa blocată trebuie să apeleze mai întâi funcția acquire(). După finalizarea lucrării, firul trebuie să elibereze blocarea prin invocarea funcției release(). Rețineți că limita superioară ar trebui să fie setată la 1. Un curs executiv PG în dezvoltare full-stack vă va ajuta să stăpâniți toate aceste abilități.

rezumat

A avea o idee clară despre limbaje de programare precum Java este esențială pentru o carieră strălucitoare ca dezvoltator de software. upGrad oferă mai multe cursuri care ar putea să vă ofere piciorul potrivit pentru o carieră promițătoare. O specializare în dezvoltare full-stack de la Purude University la upGrad vă va învăța toate abilitățile de care aveți nevoie pentru a înflori în domeniul dezvoltării software.

Învață cursuri de dezvoltare software online de la cele mai bune universități din lume. Câștigați programe Executive PG, programe avansate de certificat sau programe de master pentru a vă accelera cariera.

De ce avem nevoie de Semaphore în Java?

Un semafor este o variabilă utilizată pentru sincronizarea proceselor pentru a gestiona procesele concurente. De asemenea, previne o problemă de cursă prin controlul accesului la o resursă partajată prin mai multe procese concurente.

De ce avem nevoie de Semafor de numărare?

Semaforele sunt adesea folosite pentru a coordona accesul la resurse, cu numărul de semafori setat la lista resurselor totale. Când resursele sunt date sau adăugate, firele de execuție cresc numărul atomic, iar când resursele sunt retrase, firele de execuție reduc numărul atomic.

De ce este Semaphore cunoscut ca instrument de sincronizare?

Semaforul este în esență o variabilă întreagă partajată de mai multe fire. Această variabilă este utilizată în mediul de multiprocesare pentru a depăși problema secțiunii critice și pentru a stabili sincronizarea procesului. Aceasta este uneori denumită blocare mutex.

Ce este dezvoltarea full-stack?

Dezvoltarea full-stack este crearea atât a componentelor front-end (partea client) cât și a componentelor back-end (partea server) ale unei aplicații web. Dezvoltatorii web full-stack pot crea aplicații și site-uri web cu drepturi depline. Aceștia sunt responsabili pentru front-end, backend, baza de date și depanarea aplicațiilor online sau a site-urilor web.