[niubbo] problema con i thread

di il
1 risposte

[niubbo] problema con i thread

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;
}

}

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte