2011-06-18 11 views
5
class Semaphore { 
    private int count=100; 
    public Semaphore(int n) { 
     this.count = n; 
    } 

    public synchronized void acquire() { 
     while(count == 0) { 
     try { 
      wait(); 
     } catch (InterruptedException e) { 
      //keep trying 
     } 
     } 
     count--; 
    } 

    public synchronized void release() { 
     count++; 
     notify(); //alert a thread that's blocking on this semaphore 
    } 
} 

現在、私は100人のユーザをサポートしています。リクエストがjsp(クライアント)から来てこのクラスを通過する場合、スレッド(JSPからのリクエスト)waitnotifyは自動的に入りますか?スレッドの待機と通知のヘルプが必要

答えて

6

カスタムセマフォ実装を書く代わりに標準ライブラリのjava.util.concurrent.Semaphoreを使用することを強くお勧めします。 notifyは(Object.notify()から)任意のFIFOの保証を与えるものではありません:

選択は任意であり、実装の裁量

1

あなたに起こるこれは、一般的に良いアイデアである理由の一つに言及するのみ自分でセマフォを書く必要はありません。

SemaphoreのJava 6ドキュメントを参照してください。 とこれはtutorialからThomas Darimontです。