コードコピーは次のとおりです。
パッケージcom.yao;
java.util.concurrent.executorserviceをインポートします。
java.util.concurrent.executorsをインポートします。
java.util.concurrent.semaphoreをインポートします。
/**
* 4つの新しい同期プロセスを調整するための4つの新しい同期デバイスは、Java 5.0に追加されます。
*セマフォ、カウントダウンラッチ、サイクリックバリア、交換器。
*この例は主にセマフォを紹介します。
* Semaphoreは、リソースプールを管理するために使用されるツールであり、パスと見なすことができます。
*スレッドがリソースプールからリソースを取得したい場合、最初にパスを取得する必要があります。
*スレッドが一時的にパスを取得できない場合、スレッドはブロックされ、待機状態に入ります。
*/
パブリッククラスMySemaphoreはスレッドを拡張します{
プライベートINT I;
プライベートセマフォセマフォ;
Public MySemaphore(Int I、Semaphore Semaphore){
this.i = i;
this.semaphore = semaphore;
}
public void run(){
if(semaphore.abailablepermits()> 0){
System.out.println( ""+i+"利用可能なスペースがあります:");
}それ以外{
system.out.println( ""+i+"wait、no space");
}
試す {
semaphore.acquire();
} catch(arternedexception e){
e.printstacktrace();
}
System.out.println( ""+i+"空きスペースを取得");
試す {
thread.sleep((int)math.random()*10000);
} catch(arternedexception e){
e.printstacktrace();
}
System.out.println( ""+i+"完全に使用されている");
Semaphore.Release();
}
public static void main(string [] args){
Semaphore Semaphore = new Semaphore(2);
executorservice service = executors.newcachedthreadpool();
for(int i = 0; i <10; i ++){
service.execute(新しいmysemaphore(i、semaphore));
}
service.shutdown();
semaphore.acquireun -interrumdibly(2);
system.out.println( "使用、掃除する必要があります");
Semaphore.Release(2);
}
}