Mi a szemafor a Java-ban és annak használata?



A folyamatok szinkronizálásához szemaforot használnak. Ez a blog bemutatja a szemaforok különböző típusait és megvalósítását a java-ban.

Szemafor számlálón keresztül ellenőrzi a megosztott erőforrásokhoz való hozzáférést. Ez egy szál szinkronizálása a szálak közötti jelek küldésére szolgáló konstrukció, hogy elkerülje a kimaradt jeleket vagy védje a kritikus szakaszokat. Ebben a Java-s Semaphores blogban részletesen megértjük a koncepciót.
A blog a következő témákkal foglalkozik:

Mi a szemafor a Java-ban?

A szemafor a folyamatok szinkronizálásához használt változó, amely párhuzamos folyamatok kezelésére szolgál. Ugyancsak használják egy közös erőforráshoz való hozzáférés ellenőrzésére több egyidejű folyamat révén, és elkerülhetővé válik a versenyfeltétel.





A szemafor típusai -

  • Bináris szemafor: A bináris szemafor csak 0 és 1 értéket vesz fel, és kölcsönös kizárás megvalósítására, valamint az egyidejű folyamatok szinkronizálására szolgál.

  • Szemafor számlálása: A számláló szemafor értéke bármely pontban azt a folyamatok maximális számát jelzi, amelyek pontosan egy időben léphetnek be a kritikus szakaszba.



    a devops eszközök periodikus táblázata

A szemafor működése

  • Ha a szemaforszám> 0, a szál engedélyt kap, csökkentve a szemafor számát.

  • Egyébként a az engedély megszerzéséig blokkolva van.

  • Amikor a szálnak már nincs szüksége hozzáférésre egy megosztott erőforráshoz, kiadja az engedélyt, növelve a szemaforszámot.



    xs fájl elemzése Java-ban
  • Ha egy másik szál engedélyre vár, akkor ez a szál engedélyt szerez abban az időben.

A szemafor megvalósítása

importálja a java.util.concurrent. * // Az erőforrást megosztott osztályként veszi fel. Erőforrás: {static int count = 0} osztály sem = sem this.threadName = threadName} @Orride public void run () {// X által fut, ha (this.getName (). egyenlő ('X')) {System.out.println ('Start' + threadName) próbáld meg {// Megkapja az engedélyt a System.out.println (threadName + 'engedélyre vár.') megosztott erőforrás elérésére // a zár megszerzése sem.acquire () System.out.println (threadName + 'engedélyt kap . ') // Most a megosztott erőforrás elérése és a pihenés várni fog (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) } } 

Kimenet-
X indítása
Y kezdete
X engedélyre vár
Y engedélyre vár
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X felszabadítja az engedélyt
Y megkapja az engedélyt
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
És kiadási engedélyt
szám: 0

Ezzel véget értünk a „Szemaforok Java-ban” című blognak. Ha többet szeretne megtudni a Java-ról, nézze meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát olyan hallgatók és szakemberek számára tervezték, akik Java fejlesztők szeretnének lenni. A tanfolyamot úgy tervezték meg, hogy előrelépést nyújtson a Java programozásban, és képezze mind az alapvető, mind a fejlett Java koncepciókhoz, valamint a különböző Java keretrendszerekhez, például a Hibernate & Spring.

Van egy kérdésünk? Kérjük, említse meg a „Mi a szemafor a Java-ban” blog megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.