2011-06-18 35 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(客户端)并且通过此类,请问Thread(来自JSP的请求)waitnotify是否自动?需要帮助了解线程等待并通知

回答

6

我强烈建议使用标准库中的java.util.concurrent.Semaphore而不是编写自定义Semaphore实现。只提一个原因,这通常是一个更好的主意:notify不给任何FIFO保证(从Object.notify()):

的选择是任意的,在执行的自由裁量权发生