JAVA Semaphore実現信号灯
1572 ワード
lSemaphoreは、現在アクセスしているスレッドの数を維持し、同期メカニズムを提供します.Semaphoreを使用すると、リソースに同時にアクセスするスレッドの数を制御できます.たとえば、ファイルが許可する同時アクセス数を実現します.
ØSemaphoreが実現した機能はトイレのように5つの穴があり、もし10人がトイレに行くなら、同時に何人がトイレに行くことができますか?同時に5人しか占有できないが、5人のいずれかが譲った後、待機していた他の5人のうち1人が占有できるようになった.
Øさらに待機している5人の中では、Semaphoreオブジェクトを構築する際に入力されるパラメータオプションに応じて、ランダムに優先順位を獲得してもよいし、先着順に機会を獲得してもよい.
l単一信号量のSemaphoreオブジェクトは、反発ロックの機能を実現することができ、一方のスレッドによって「ロック」が得られ、他方のスレッドによって「ロック」が解放され、デッドロック回復の場合に適用することができる.
駐車スペースの管理、小さな電子機器、リアルタイム性が強い
semaphore
.
ØSemaphoreが実現した機能はトイレのように5つの穴があり、もし10人がトイレに行くなら、同時に何人がトイレに行くことができますか?同時に5人しか占有できないが、5人のいずれかが譲った後、待機していた他の5人のうち1人が占有できるようになった.
Øさらに待機している5人の中では、Semaphoreオブジェクトを構築する際に入力されるパラメータオプションに応じて、ランダムに優先順位を獲得してもよいし、先着順に機会を獲得してもよい.
l単一信号量のSemaphoreオブジェクトは、反発ロックの機能を実現することができ、一方のスレッドによって「ロック」が得られ、他方のスレッドによって「ロック」が解放され、デッドロック回復の場合に適用することができる.
駐車スペースの管理、小さな電子機器、リアルタイム性が強い
semaphore
.
public class SemaphoreTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final Semaphore sp = new Semaphore(3);
for(int i=0;i<10;i++){
Runnable runnable = new Runnable(){
public void run(){
try {
sp.acquire();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println(" " + Thread.currentThread().getName() +
" , " + (3-sp.availablePermits()) + " ");
try {
Thread.sleep((long)(Math.random()*10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" " + Thread.currentThread().getName() +
" ");
sp.release();
// ,
System.out.println(" " + Thread.currentThread().getName() +
" , " + (3-sp.availablePermits()) + " ");
}
};
service.execute(runnable);
}
}
}