Kas yra „Java“ semaforas ir jo naudojimas?



Procesų sinchronizavimui naudojamas semaforas. Šis tinklaraštis padės jums suprasti įvairius semaforų tipus ir įgyvendinimą java.

Semaforas kontroliuoja prieigą prie bendro šaltinio per skaitiklį. Tai yra gijų sinchronizavimas konstrukcija, naudojama signalams siųsti tarp gijų, kad būtų išvengta praleistų signalų, arba apsaugoti kritinę dalį. Šiame tinklaraštyje apie „Java“ semaforus mes išsamiai suprasime šią sąvoką.
Šiame tinklaraštyje bus aptariamos šios temos:

Kas yra „Java“ semaforas?

Semaforas yra procesų sinchronizavimui naudojamas kintamasis, naudojamas valdyti vienu metu vykstančius procesus. Jis taip pat naudojamas kontroliuojant prieigą prie bendro ištekliaus keliais vienu metu vykstančiais procesais ir siekiant išvengti lenktynių sąlygų.





Semaforo tipai -

  • Dvejetainė semafora: Dvejetainė semaforo reikšmė yra tik 0 ir 1 ir naudojama abipusiam išskyrimui įgyvendinti bei sinchronizuoti vienu metu vykstančius procesus.

  • Skaičiuojama semaforas: Skaičiavimo semaforos vertė bet kuriame taške nurodo maksimalų procesų, kurie tuo pačiu metu gali patekti į kritinę sekciją, skaičių.



Semaforo kūrimas

  • Jei semaforų skaičius> 0, gija gauna leidimą, sumažinant semaforų skaičių.

    kaupti ir kaupti atmintį „Java“
  • Kitaip yra užblokuotas, kol bus galima gauti leidimą.

  • Kai gijai nebereikia prieigos prie bendro šaltinio, ji atleidžia leidimą, padidindama semaforų skaičių.



  • Jei kita gija laukia leidimo, tada ta gija tuo metu gaus leidimą.

Semaforo įgyvendinimas

importuoti java.util.concurrent. * // Imsis išteklių kaip bendros klasės klasės. Šaltinis {static int count = 0} klasė „MyDemo“ pratęsia demonstracinę versiją {Semaforas sem String threadName public MyDemo (Semaforas sem, String threadName) {super (threadName) tai. sem = sem this.threadName = threadName} @Paisyti public void run () {// Vykdo X, jei (this.getName (). lygu ('X')) {System.out.println ('Starting' + threadName) pabandykite {// Gauti leidimą pasiekti bendrą išteklių System.out.println (threadName + 'laukia leidimo.') // įsigyti spyną sem.acquire () System.out.println (threadName + 'gauna leidimą . ') // Dabar lauks prieiga prie bendro ištekliaus ir ilsėsis (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) } } 

Išvestis
Pradedant X
Pradedant Y
X laukia leidimo
Y laukia leidimo
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X išleidžia leidimą
Y gauna leidimą
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
Ir išleidžia leidimą
skaičius: 0

Tuo mes baigėme šį tinklaraštį „Semaforai Javoje“. Jei norite sužinoti daugiau apie „Java“, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai yra skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti žvalgytis į „Java“ programavimą ir išmokyti pagrindines ir pažangesnes „Java“ koncepcijas kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

sujungti rūšiavimo kodą c ++

Turite mums klausimą? Prašau tai paminėti šio „Kas yra semaforas Java“ tinklaraščio komentarų skyriuje, ir mes kuo greičiau susisieksime su jumis.