2011-06-18 40 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 
    } 
} 

Hiện tại tôi đang hỗ trợ 100 người dùng. Nếu một yêu cầu đến từ jsp (Máy khách) và đi qua lớp này, thì yêu cầu của Chủ đề (yêu cầu từ JSP) waitnotify có tự động không?Cần trợ giúp để hiểu Chủ đề chờ và thông báo

Trả lời

6

Tôi rất muốn khuyên bạn nên sử dụng java.util.concurrent.Semaphore từ thư viện chuẩn thay vì viết triển khai Semaphore tùy chỉnh. Chỉ đề cập đến một lý do tại sao điều này nói chung là một ý tưởng tốt hơn: notify không đưa ra bất cứ bảo đảm FIFO (từ Object.notify()):

Sự lựa chọn là tùy ý và xảy ra theo ý của việc thực hiện

1

Bạn không phải tự viết một semaphore.

Hãy xem tài liệu Java 6 cho Semaphore. và điều này tutorial từ Thomas Darimont.

Các vấn đề liên quan