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

Actualmente apoyo a 100 usuarios. Si una solicitud proviene de jsp (Cliente) y pasa por esta clase, ¿el subproceso (la solicitud de JSP) wait y notify automáticamente?Necesita ayuda para entender el hilo esperar y notificar

Respuesta

6

Recomiendo usar el java.util.concurrent.Semaphore de la biblioteca estándar en lugar de escribir una implementación de semáforo personalizada. Sólo mencionar una de las razones por qué esto es generalmente una idea mejor: notify no da ninguna garantía FIFO (de Object.notify()):

La elección es arbitraria y se produce según el criterio de la aplicación

1

Usted no tienes que escribir un semáforo tú mismo.

Eche un vistazo a la documentación de Java 6 para Semaphore. y esto tutorial de Thomas Darimont.

Cuestiones relacionadas