需要帮助理解线程等待和通知

时间:2011-06-18 08:41:59

标签: java concurrency synchronization

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会自动生成吗?

2 个答案:

答案 0 :(得分:6)

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

  

选择是任意的,由实施决定

答案 1 :(得分:1)

您不必自己编写信号量。

查看Semaphore的Java 6文档。 以及来自Thomas Darimont的tutorial