Semafori vuonna ohjaa pääsyä jaettuun resurssiin laskurin kautta. Se on langan synkronointi Rakenne, jota käytetään lähettämään signaaleja ketjujen välillä, jotta vältetään menetetyt signaalit tai suojataan kriittinen osa. Tässä Java-semaforeja käsittelevässä blogissa ymmärrämme käsitteen yksityiskohtaisesti.
Seuraavat aiheet käsitellään tässä blogissa:
Mitä semafori on Java-sovelluksessa?
Semafori on muuttuja, jota käytetään prosessien synkronointiin ja jota käytetään samanaikaisten prosessien hallintaan. Sitä käytetään myös yhteisen resurssin käytön hallintaan useilla samanaikaisilla prosesseilla ja kilpailutilanteen välttämiseksi.
Semaforityypit -
Binaarinen semafori: Binaarisen semaforin arvoina on vain 0 ja 1, ja sitä käytetään keskinäisen poissulkemisen toteuttamiseen sekä samanaikaisten prosessien synkronointiin.
mikä on funktio sql: ssä
Lasketaan semaforia: Laskennan semaforin arvo missä tahansa kohdassa osoittaa prosessien enimmäismäärän, joka voi päästä kriittiseen osaan täsmälleen samanaikaisesti.
Semaforin työ
Jos semaforien määrä on> 0, säie hankkii luvan ja vähentää semaforien määrää.
Muuten estetään, kunnes lupa voidaan hankkia.
Kun säie ei enää tarvitse pääsyä jaettuun resurssiin, se vapauttaa luvan ja lisää semaforien määrää.
Jos toinen ketju odottaa lupaa, kyseinen ketju hankkii luvan tuolloin.
fibonacci-sarjan koodi java
Semaforin toteutus
tuo java.util.concurrent. * // vie resurssin jaettuna luokan luokkaan. Resurssi {static int count = 0} luokka MyDemo laajentaa esittelyä {Semafori sem String threadName public MyDemo (Semaphore sem, String threadName) {super (threadName) tämä. sem = sem this.threadName = threadName} @Override public void run () {// Suorittaa X, jos (this.getName (). on yhtä suuri ('X')) {System.out.println ('Starting' + threadName) yritä {// Hanki lupa käyttää jaettua resurssia System.out.println (threadName + 'odottaa lupaa.') // hankkii lukon sem.acquire () System.out.println (threadName + 'saa luvan . ') // Jaetun resurssin käyttäminen ja lepo odottaa nyt (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) } }
Tuotos-
Aloitetaan X
Aloitetaan Y
X odottaa lupaa
Y odottaa lupaa
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X vapauttaa luvan
Y saa luvan
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
Ja vapauttaa luvan
määrä: 0
Tämän myötä olemme päässeet tämän blogin aiheeseen ”Semaphores in Java”. Jos haluat oppia lisää Javasta, tutustu Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssi on suunniteltu opiskelijoille ja ammattilaisille, jotka haluavat olla Java-kehittäjiä. Kurssi on suunniteltu antamaan sinulle etumatka Java-ohjelmointiin ja kouluttamaan sekä ydin- että edistyneitä Java-konsepteja sekä erilaisia Java-kehyksiä, kuten Hibernate & Spring.
Onko sinulla kysymys meille? Mainitse se tämän 'Mikä on semafori Javassa' -blogin kommenttiosassa, ja otamme sinuun yhteyttä mahdollisimman pian.