Mitä semafori on Java-sovelluksessa ja sen käyttö?



Semaforia käytetään prosessien synkronointiin. Tämä blogi opastaa sinut läpi semaforien tyypit ja toteutuksen Java-tilassa.

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.