Semaphore.java 954 Bytes
Newer Older
Luca Arrotta's avatar
Luca Arrotta committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
package semaphore;//Classe che implementa tramite wait e notify un Semaforo.
//Se non vi ricordate cosa sia un semaforo, google is your best friend.

public class Semaphore {
    private int maxNumber; //numero massimo di thread
    private int threadsIn; //conteggio dei thread nell'area critica

    Semaphore(int max) {
        maxNumber = max;
        threadsIn = 0;
    }

    public synchronized void enter() {
        System.out.println("" + threadsIn + " in the critical region...");
        //quando abbiamo raggiunto il numero massimo di thread, chi vuole entrare aspetta
        while (threadsIn >= maxNumber) {
            try {this.wait();}
            catch(InterruptedException ie) {ie.printStackTrace();}
        }

        threadsIn++;
    }

    public synchronized void exit() {
        threadsIn--;
        //quando un thread esce dall'area critica, sveglia qualcuno in attesa di entrare (se presente)
        this.notify();
    }
}