Salinan kode adalah sebagai berikut:
paket com.yao;
impor java.util.concurrent.executorservice;
impor java.util.concurrent.Executors;
impor java.util.concurrent.semaphore;
/**
* 4 Perangkat sinkronisasi baru untuk mengoordinasikan proses antar-thread ditambahkan dalam Java 5.0, yaitu:
* Semaphore, Countdownlatch, Cyclicbarrier dan Exchanger.
* Contoh ini terutama memperkenalkan semaphore.
* Semaphore adalah alat yang digunakan untuk mengelola kumpulan sumber daya, yang dapat dianggap sebagai umpan.
* Jika utas ingin mendapatkan sumber daya dari kumpulan sumber daya, itu harus terlebih dahulu mendapatkan izin.
* Jika utas tidak bisa mendapatkan operan sementara, utas akan diblokir dan dimasukkan ke keadaan menunggu.
*/
MySemaphore kelas publik memperluas utas {
int private i;
semaphore semaphore pribadi;
publik mysemaphore (int i, semaphore semaphore) {
this.i = i;
this.semaphore = semaphore;
}
public void run () {
if (semaphore.availablePerMits ()> 0) {
System.out.println (""+i+"Ada spasi yang tersedia:");
}kalau tidak{
System.out.println (""+i+"tunggu, tidak ada ruang");
}
mencoba {
semaphore.acquire ();
} catch (InterruptedException e) {
e.printstacktrace ();
}
System.out.println (""+i+"Dapatkan ruang kosong");
mencoba {
Thread.sleep ((int) math.random ()*10000);
} catch (InterruptedException e) {
e.printstacktrace ();
}
System.out.println (""+i+"benar -benar digunakan");
semaphore.release ();
}
public static void main (string [] args) {
Semaphore semaphore = semaphore baru (2);
Layanan ExecutorService = Executors.NewCachedThreadPool ();
untuk (int i = 0; i <10; i ++) {
service.execute (mysemaphore baru (i, semaphore));
}
service.shutdown ();
semaphore.acquireuninterricture (2);
System.out.println ("digunakan, perlu dibersihkan");
semaphore.release (2);
}
}