Witam. Próbuję zrozumieć jak działają wątki, w związku z tym testuje różne rzeczy i trafiłem na problem, którego nie potrafię zrozumieć. Zmienna sumaWag przyjmuję wartości, których nie powinna np. 10, 90, liczby ujemne, liczby większe od 230. Z góry dziękuje za pomoc w zrozumieniu dlaczego tak się dzieje.
public class WyciagTest
{
public static void main(String[] args)
{
Thread klient1 = new Klient(70);
Thread klient2 = new Klient(80);
Thread klient3 = new Klient(80);
klient1.start();
klient2.start();
klient3.start();
}
}
public class Klient extends Thread
{
private int waga;
private int id=0;
private static int NextId=1;
private static int sumaWag=0;
public Klient(int w)
{
this.waga=w;
this.id=NextId;
NextId++;
}
public void zjazd()
{
System.out.println("Klient nr: " + id+ "Zjezdza z górki");
try
{
sleep((long) Math.random()*1000);
}
catch (InterruptedException e){}
}
public void wjazd()
{
sumaWag+=waga;
System.out.println(sumaWag);
try
{
sleep(1000);
}catch (InterruptedException e){e.printStackTrace();}
sumaWag-=waga;
}
public void run()
{
for (int i =0; i<20; i++)
{
zjazd();
wjazd();
}
}
}