Apa Semaphore di Java dan penggunaannya?



Semaphore digunakan untuk sinkronisasi proses. Blog ini akan memandu Anda memahami berbagai jenis dan implementasi semaphore di java.

Semaphore di mengontrol akses ke sumber daya bersama melalui penghitung. Ini adalah sebuah sinkronisasi benang konstruksi digunakan untuk mengirim sinyal antara utas untuk menghindari sinyal yang terlewat atau menjaga bagian kritis. Di blog Semaphores di Java ini, kita akan memahami konsepnya secara detail.
Topik berikut akan dibahas dalam blog ini:

bagaimana menangani popup di selenium webdriver

Apa Semaphore di Java?

Semaphore adalah variabel yang digunakan untuk sinkronisasi proses yang digunakan untuk mengelola proses bersamaan. Ini juga digunakan untuk mengontrol akses ke sumber daya bersama dengan beberapa proses bersamaan dan menghindari kondisi balapan.





Jenis semaphore -

  • Semafor biner: Sebuah semaphore biner hanya membutuhkan 0 dan 1 sebagai nilai dan digunakan untuk mengimplementasikan pengecualian timbal balik serta menyinkronkan proses bersamaan.

  • Menghitung semaphore: Nilai semafor penghitungan di titik mana pun menunjukkan jumlah maksimum proses yang dapat memasuki bagian kritis pada waktu yang sama.



Bekerja dari Semaphore

  • Jika jumlah semafor> 0, utas memperoleh izin, mengurangi jumlah semafor.

  • Lain, itu diblokir sampai izin dapat diperoleh.

  • Ketika thread tidak lagi membutuhkan akses ke sumber daya bersama, itu melepaskan izin, menambah jumlah semaphore.



  • Jika thread lain sedang menunggu izin, maka thread tersebut akan memperoleh izin pada saat itu.

Penerapan Semaphore

import java.util.concurrent. * // Akan mengambil Resource sebagai kelas bersama kelas Sumber daya {static int count = 0} kelas MyDemo meluas Demo {Semaphore sem String threadName public MyDemo (Semaphore sem, String threadName) {super (threadName) ini. sem = sem this.threadName = threadName} @Override public void run () {// Jalankan Oleh X if (this.getName (). equals ('X')) {System.out.println ('Starting' + threadName) coba {// Akan mendapatkan izin untuk mengakses sumber daya bersama System.out.println (threadName + 'menunggu izin.') // memperoleh kunci sem.acquire () System.out.println (threadName + 'mendapat izin . ') // Sekarang, mengakses sumber daya bersama dan sisanya akan menunggu (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) } } 

Keluaran-
Memulai X
Memulai Y
X menunggu izin
Y menunggu izin
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X melepaskan izinnya
Y mendapat izin
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
Dan izin rilis
hitungan: 0

Dengan ini, kita sampai pada akhir blog ini tentang “Semaphores in Java”. Jika Anda ingin mempelajari lebih lanjut tentang Java, lihat oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus pelatihan dan sertifikasi Java J2EE dan SOA Edureka dirancang untuk siswa dan profesional yang ingin menjadi Pengembang Java. Kursus ini dirancang untuk memberi Anda permulaan dalam pemrograman Java dan melatih Anda untuk konsep Java inti dan lanjutan bersama dengan berbagai kerangka kerja Java seperti Hibernate & Spring.

cara keluar dari program di java

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar di blog 'Apa itu Semaphore di Java' dan kami akan menghubungi Anda kembali secepatnya.