Što je Semaphore u Javi i njegova uporaba?



Za sinkronizaciju procesa koristi se semafor. Ovaj će vas blog voditi kroz različite vrste i implementaciju semafora u javi.

Semafor u kontrolira pristup zajedničkom resursu putem brojača. To je sinkronizacija niti konstrukcija koja se koristi za slanje signala između niti kako bi se izbjegli propušteni signali ili zaštitio kritični dio. U ovom blogu o Semaforima na Javi detaljno ćemo razumjeti koncept.
Na ovom blogu bit će obrađene sljedeće teme:

Što je Semaphore u Javi?

Semafor je varijabla koja se koristi za sinkronizaciju procesa koja se koristi za upravljanje istodobnim procesima. Također se koristi za kontrolu pristupa zajedničkom resursu pomoću više istovremenih procesa i izbjegavanje uvjeta utrke.





Vrste semafora -

  • Binarni semafor: Binarni semafor uzima samo 0 i 1 kao vrijednosti i koristi se za uzajamno izuzeće kao i za sinkronizaciju istodobnih procesa.

    kako koristiti tableau javno
  • Brojanje semafora: Vrijednost semafora za brojanje u bilo kojoj točki označava maksimalan broj procesa koji mogu ući u kritični odjeljak u isto vrijeme.



Rad Semafora

  • Ako je broj semafora> 0, nit stječe dozvolu, smanjujući broj semafora.

    sortiranje niza u programu c ++
  • Inače, je blokiran dok se ne može dobiti dozvola.

  • Kada nit više ne treba pristup zajedničkom resursu, ona izdaje dozvolu, povećavajući broj semafora.



  • Ako druga nit čeka dozvolu, tada će ta nit steći dozvolu u to vrijeme.

Implementacija Semaphora

import java.util.concurrent. * // Resurs će uzeti kao zajedničku klasu klase Resource {static int count = 0} class MyDemo produžuje Demo {Semaphore sem String threadName public MyDemo (Semaphore sem, String threadName) {super (threadName) this. sem = sem this.threadName = threadName} @Override public void run () {// Pokreni X ako (this.getName (). je jednako ('X')) {System.out.println ('Starting' + threadName) try {// Dobit će dozvolu za pristup dijeljenom resursu System.out.println (threadName + 'čeka dozvolu.') // stjecanje zaključavanja sem.acquire () System.out.println (threadName + 'dobiva dozvolu . ') // Sada će pristup zajedničkom resursu i ostatak pričekati (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) } } 

Izlaz-
Pokretanje X
Pokretanje Y
X čeka dozvolu
Čekate dozvolu
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X izdaje dozvolu
Dobivate dozvolu
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
I pušta dozvolu
broj: 0

sql poslužitelj integracije usluga ssis korak po korak vodič

Ovim smo došli do kraja ovog bloga na temu „Semafori u Javi“. Ako želite saznati više o Javi, pogledajte Edureka, pouzdana tvrtka za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA namijenjen je studentima i profesionalcima koji žele biti programer Java. Tečaj je dizajniran da vam pruži početnu prednost u Java programiranju i osposobi vas za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Spring.

Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga 'Što je Semaphore u Javi' i javit ćemo vam se što je prije moguće.