import java.io.*; import java.lang.*; class MioSemaforo // classe semaforo { int value; public MioSemaforo() { value = 1; } public MioSemaforo(int value) { this.value = value; } public synchronized void up(){ // incrementa il semaforo value++; notify(); } public synchronized void down() { // decrementa il semaforo while (value<=0){ // controlla che il semaforo non sia 0 try {wait();} catch(InterruptedException e) { }; } value--; } } class dati { int value; public dati(int value) { this.value= value; } public int get() { return value; } public void set(int value) { this.value = value; } } class classeA extends Thread { dati cont; // dati condivisi MioSemaforo sem; public classeA(dati cont, MioSemaforo sem) { this.sem = sem; this.cont = cont; } public void run() { for(int i=0; i<10; i++) { sem.down(); int d = cont.get(); System.out.println("Classe A "+d); cont.set(++d); sem.up(); } } } class classeB extends Thread { dati cont; MioSemaforo sem; public classeB(dati cont, MioSemaforo sem) { this.sem = sem; this.cont = cont; } public void run() { for(int i=0; i<10; i++) { sem.down(); int d = cont.get(); System.out.println("Classe B "+d); cont.set(++d); sem.up(); } } } public class jsp15{ public static void main(String argv[]) { dati cont= new dati(1); // inizializzo la classe condivisa MioSemaforo sem = new MioSemaforo (1); classeA A = new classeA(cont,sem); classeB B = new classeB(cont,sem); A.start(); B.start(); } }