Mis on semafoor Java-s ja selle kasutamine?



Protsesside sünkroniseerimiseks kasutatakse semaforit. See ajaveeb tutvustab teid semaforide erinevat tüüpi ja rakendamist Java-s.

Semafoor aastal kontrollib loenduri kaudu juurdepääsu jagatud ressursile. See on lõime sünkroniseerimine konstrukt, mida kasutatakse signaalide edastamiseks lõimede vahel, et vältida vastamata signaale või kaitsta kriitilist osa. Selles Java-semaforeid käsitlevas ajaveebis mõistame seda mõistet üksikasjalikult.
Selles ajaveebis käsitletakse järgmisi teemasid:

Mis on Java semafoor?

Semafoor on protsesside sünkroniseerimiseks kasutatav muutuja, mida kasutatakse samaaegsete protsesside haldamiseks. Seda kasutatakse ka mitme üheaegse protsessi abil ühisele ressursile juurdepääsu kontrollimiseks ja võistlustingimuste vältimiseks.





Semafooride tüübid -

  • Binaarne semafor: Binaarne semafor võtab väärtusteks ainult 0 ja 1 ning seda kasutatakse nii vastastikuse välistamise kui ka samaaegsete protsesside sünkroonimiseks.

  • Semafori lugemine: Loendussemafori väärtus mis tahes punktis näitab maksimaalset arvu protsesse, mis võivad kriitilisse sektsiooni siseneda täpselt samal ajal.



Semafori töötamine

  • Kui semafooride arv on> 0, saab niit loa, vähendades semaforite arvu.

  • Muidu blokeeritakse kuni loa saamiseni.

  • Kui lõim ei vaja enam juurdepääsu jagatud ressurssidele, vabastab see loa, suurendades semaforide arvu.



    python def __init __ (ise)
  • Kui mõni teine ​​lõim ootab luba, siis see niit saab sel ajal loa.

Semafori rakendamine

import java.util.concurrent. * // võtab ressursi jagatud klassi klassiks. Ressurss {static int count = 0} klass sem = sem this.threadName = threadName} @Alusta avalik void run () {// Run by X if (this.getName (). võrdub ('X')) {System.out.println ('Start' + threadName) proovige {// saab loa juurdepääsuks jagatud ressursile System.out.println (threadName + 'ootab luba.') // lukustuse omandamine sem.acquire () System.out.println (threadName + 'saab loa . ') // Nüüd ootab juurdepääs jagatud ressursile ja puhkus (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) } } 

Väljund-
X-i alustamine
Alustades Y-st
X ootab luba
Y ootab luba
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X vabastab loa
Y saab loa
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
Ja vabastab loa
arv: 0

Sellega oleme jõudnud selle blogi teemal „Semafoorid Javas”. Kui soovite Java kohta rohkem teada saada, vaadake Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik hõlmab üle 250 000 rahuloleva õppija, levinud üle kogu maailma. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud õpilastele ja spetsialistidele, kes soovivad olla Java arendajad. Kursus on loodud selleks, et anda teile Java programmeerimises edukas algus ja õpetada teid nii Java-põhiprogrammide kui ka edasijõudnute mõistete ning erinevate Java-raamistike, näiteks Hibernate & Spring, jaoks.

Kas teil on meile küsimus? Palun mainige seda selle ajaveebi „Mis on semafor Java-s” kommentaaride osas ja võtame teiega ühendust niipea kui võimalik.