Witam, Javy się dopiero uczę więc wybaczcie jeśli będę plótł bzdrury :).
W wątku głównym programu uruchamiam 3 wątki poboczne które zajmują się szukaniem jakiejś z góry ustalonej liczby. Trzy działające współbieżnie wątki szukają tej liczby i jeśli jeden znajdzie liczbę to ją wypisuje i powinien przerwać działanie pozostałych.
Zrobiłem tak ale coś nie działa.
Opiszę mniej więcej najważniejsze punkty programu, które powinny sprawić, że wszystko będzie działać dobrze.
Wątki szukające liczby posiadają współdzieloną zmienna, która jest inicjowana wartością false w wątku głównym i jest przekazywana do każdego z wątków pobocznych w konstruktorze. Dlatego też we wszystkich wątkach mamy referencję do tego samego obiektu. Ale podobno wątki działają na kopiach zmiennych dlatego też trzeba albo zmienna współdzieloną zadeklarować z identyfikatorem volatile lub metodę run() uczynić synchronizowaną lub kod odwołujący się do zmiennej współdzielonej powinien znajdować się w bloku synchronizowany. Próbowałem zarówno volatile jak i synchronizacji. W metodzie run() wykonywana jest pętla coś w tym stylu:
for(int i = 0; i < gornyZakres; i++) {
if(zmiennaWspoldzielona == true) {
System.out.println("Inny wątek znalazł już liczbę");
return;
}
}
Wg. mnie powinno to działać... ale nie działa. Może ktoś podsunąć jakieś sugestie czego to wina?
Z góry dzięki. Pozdrawiam