Quote Originariamente inviata da andbin Visualizza il messaggio
...
Grazie mille, ho risolto!
Avrei però un altri due dubbi: in pratica vorrei passare ai miei thread il nome (e lo faccio tramite .currentThread().getThread() ) ma da errore in compilazione (avevo visto questo esempio da codici del prof) e non riesco a capire se devo usarlo all'interno della classe che istanzia la variabile globale o all'interno dell'implementazione di runnable. Inoltre volevo sapere la differenza tra un metodo synchronized e no e se è necessario usarlo all'interno dei metodi di varGlobale. Vi allego il codice per semplicità

codice:
public class produttori {	public static void main(String args[]){
		
		varGlobale x = new varGlobale();
		Thread product1 = new Thread(new products("PRODUTTORE1",x));
		Thread product2 = new Thread(new products("PRODUTTORE2",x));
		
		product1.start();
		product2.start();
		try{
			product1.join();
		//	System.out.println(">> Join di procut 1...");
			product2.join();
		//	System.out.println(">> Join di product 2...");
		}catch (InterruptedException e) {e.printStackTrace();}
	}
}


class varGlobale {
	int acc = 0;
	
	
	public varGlobale () {
		String threadName = Thread.currentThread().getName();
		System.out.println(">>" + threadName + " instanzio la variabile globale..");
	}
	
	public int getVar () { return acc; }
	
	public int sommaVar(int i){
		acc+=i;
		return acc;
	}
}


class products implements Runnable {
	
	String threadName = Thread.currentThread().getName(); 
	varGlobale x;
	
	public products (String threadName,varGlobale x) {
		super(threadName);
		this.x=x;
		System.out.println("Costruttore di : "+ threadName + "istanzio acc");
	}
	
	public void run(){
		boolean ciclo = true;
		while(ciclo){
			int rand = (int) (Math.random() * 21) - 10;
			System.out.println(">> Sono il thread: "+ threadName +" numero random generato " + rand );
			if(rand == 0) {
				System.out.println(">> Rand vale 0, esco!");
				ciclo = false;
			}
			else {
				x.sommaVar(rand);
				System.out.println("Valore di acc attuale: " + x.getVar());
			}
		}
	}
	
	
}