Ciao a tutti, ho un problema con i thread.
ho copiato dal libro di mokabyte il codice di base che usa i thread, e
poi l'ho modificato per inserire i synchronized.
Questo codice semplicemente lancia due thread che incrementano 100
volte ciascuno un int contenuto dentro un oggetto passato ai due
thread dal programma principale.
il risultato finale dovrebbe essere 200, e invece viene fuori 100.
la cosa strana e' che se in qualche punto del programma (vedere i
commenti) inserisco un "ritardo", tipo una sleep o un ciclo che per
100 volte stampa a video l'oggetto incrementato, funziona a dovere.
o meglio, in quest'ultimo caso le prime 20-30 stampe scrive 100, le
seguenti 200. Non riesco a capire dov'e' il problema. allego i 3 file:
Grazie per l'aiuto!
ProvaThread.java
package provaThread;
import java.io.BufferedReader;
import java.io.FileReader;
import java.net.*;
public class ProvaThread2
{
public static void main(String[] args)
{
IntT giri=new IntT();
Thr2 thr1=new Thr2(giri);
Thr2 thr2=new Thr2(giri);
thr1.start();
thr2.start();
// try {Thread.sleep(1000);}
// catch (Exception E){}
for (int i=0; i<100;i++)
{
System.out.println("->"+giri.get());
}
}
}
Thr2.java
package provaThread;
public class Thr2 implements Runnable
{
IntT intProva;
private Thread threadCorr=null;
public Thr2(IntT id)
{
intProva=id;
}
public void run()
{
for (int i=0;i<100;i++)
{
intProva.add();
// System.out.println(intProva.get());
}
public void start()
{
threadCorr=new Thread(this);
threadCorr.start();
}
}
IntT.java
package provaThread;
public class IntT
{
private int T=0;
public synchronized void add()
{
T++;
}
public synchronized int get()
{
return T;
}
}