Semaphore.java 846 Bytes
Newer Older
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
//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 extends Thread {
	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
		if (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();
	}
}