Devi implementare la concorrenza tra i vari thread
Questo è un sempio di implementazione di una classe che rappresenterebbe una risorsa condivisa tra più thread, ci sono altre classi però tutto sommato i punti fondamentali si capiscono
codice:
//Classe che rappresenta la risorsa
class Risorsa{
private final int MAX = 2; //massimo di utenti che usano la risorsa contemporaneamente
private int contatore = 0; //utenti che usano la risorsa
public synchronized void accesso(){
//controllo se ci sono gia' due processi che utilizzano la risorsa
while (contatore == MAX){
try {
wait(); //se la risorsa è occupata metto gli altri thread in attesa
}
catch(InterruptedException e){
System.out.println("Errore nel wait di accesso");
}
}
//ho preso la risorsa quindi incremento il numero di utenti che la stanno usando
contatore++;
}
public synchronized void libero(){
//ho terminato l'utilizzo della risorsa quindi diminuisco il contatore e risveglio
//eventuali utenti in attesa di usarla.
contatore--;
if (contatore < MAX)
notifyAll(); //il thread attuale finisce di usare la risorsa quindi "sveglia" tutti gli altri thread
}
}
Ti faccio notare che i metodi di una classe condivisa per fare concorrenza tra più thread devono contenere la parola synchronized .
Ciao.