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.