Hej,
Mam problem natury wątków w Java. Staram się ogarnąć ten temat i mam zagwostkę. W programie mam dwa wątki do których przekazuje w konstruktorze ten sam obiekt. I w ramach każdego wątku w metodzie run wywołuje tę samą metodę należacą do tego samego obiektu. W jednym wątku jako argument metody podaje jakąś liczbę a w drugim inną liczbę. Metoda ta ma dopisane synchronized.
I tu moje pytanie , jeżeli mam dwa wątki to wszystko gra , występuje synchronizacja tej metody w sensie , najpierw wykonają się instrukcjie metody w ramach jednego wątku , a potem drugiego. Natomiast gdy zwiększe liczbę wątków do 3 i w górę zaczynają się pojawiać nieporządane efekty typu nie właściwe wartości obliczane w fukcji.
Klasy WatekP3 i WatekP4 wyglądaja analogicznie do tego co posiada WatekP1 z tą różnicą, że dodaje inną liczbę.
Z góry dziękuje za wszelkie odpowiedzi
Podaje kod:
package pl;
public class SzaloneWatki {
public static void main(String[] args) {
// TODO Auto-generated method stub
Counter Con = new Counter();
WatekP1 w1 = new WatekP1(Con);
WatekP2 w2 = new WatekP2(Con);
WatekP3 w3 = new WatekP3(Con);
WatekP4 w4 = new WatekP4(Con);
w1.start();
w2.start();
w3.start();
w4.start();
}
}
package pl;
public class WatekP1 extends Thread{
//private int liczbaWatka;
Counter c;
public WatekP1(Counter g) {
this.c=g;
// TODO Auto-generated constructor stub
}
@Override
public void run() {
// TODO Auto-generated method stub
c.add(4);
}
}
package pl;
public class WatekP2 extends Thread{
Counter c;
public WatekP2(Counter g) {
this.c=g;
// TODO Auto-generated constructor stub
}
@Override
public void run() {
// TODO Auto-generated method stub
c.add(8);
}
}
package pl;
public class Counter {
int count = 0;
synchronized public void add(int value){
this.count = this.count + value;
disp();
}
public void disp()
{
System.out.println("Count wynosi: "+count);
}
}