2012-03-26 10 views
17

Czy każdy może udostępnić prostą próbkę użycia semafora? Jeśli jest to możliwe, próbka rozwiązania zadania bez semafora, a następnie z semaforem, aby zrozumieć główną ideę tego.Prosta próbka semaforowa

+1

Javadoc z 'java.util.concurrent.Semaphore' ma przykład. (i google ma trochę więcej, btw: * przykład semafora java *) –

Odpowiedz

20

Oto prosta implementacja Semafor:

public class Semaphore { 
    private boolean signal = false; 

    public synchronized void take() { 
    this.signal = true; 
    this.notify(); 
    } 

    public synchronized void release() throws InterruptedException{ 
    while(!this.signal) wait(); 
    this.signal = false; 
    } 

} 

Sposób take() wysyła sygnał, który jest przechowywany wewnętrznie w semafora. Metoda release() czeka na sygnał. Po otrzymaniu flaga sygnału jest ponownie czyszczona, a metoda release() została zakończona.

Czytaj this article i przyjrzeć się tej example