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.