Współbieżnie działające wątki

0

Witam,
mam napisać aplikację, która symuluje poruszające się koraliki po okręgu. Każdy koralik to osobny wątek. Mam już napisana aplikację, pozwalającą na dodawanie i usuwanie nowych wątków, zmienianie prędkości poruszających się koralików. Jedyny problem, albo aż taki wielki, by szybsze koraliki nie wyprzedzały wolniejszych. Czy ktoś mógłby naprowadzić jak to osiągnąć? Są to moje pierwsze programy wielowątkowe i wielorodność różnych mechanizmów sprawia mi problem w wykonaniu tego zadania. Będę wdzięczny za pomoc

0

Możesz:

  1. Utworzyć osobny wątek, który obsługują całą logikę w jednym wątku
  2. Utworzyć dwa wątki i je synchronicować.

Ja bym proponował stworzyć jeden obiekt synchronizujący (chyba może być static i ogólnodostępny dla obu obiektów) i inta przechowującego ilość "gotowych" obiektów
Kiedy jeden zaczyna, ustawia odejmuje od licznika 1, a kiedy kończy dodaje do niego 1 i czeka aż licznik będzie wskazywał, że wszystkie koraliki skończyły swoją robotę. Oczywiśnie pętla while(done<ilosc){} nie wchodzi w grę, trzeba użyć metod synchronizujących:

Potrzebny ten obiekt synchronizujący (nazwałem go `blokada). Całą metodę otaczasz:

synchronized(blokada){
  //tu cała pętla
}

I potem końcówka pętli tej metody:

done+=1;
blokada.notifyAll(); //Oznajmia wszystkim czekającym na `blokada, żeby ruszyły dalej
while(done<ilosc){ //dopóki wszystkie nie są wykonane
  blokada.wait(); //czeka na `blokada
}

Myślę że to by było dobre. Pamiętaj tylko że `blokada to musi być TEN SAM obiekt (wystarczy klasa Object()) we wszystkich "koralikach".

0

Razi91:
Ale to ma być na wielu wątkach, a nie jednym czy dwóch.

Jeśli miałbym podobne zadanie to pewnie bym je zrobił w Scali na Aktorach :D Nie trzeba bawić się w synchronizację i martwić o deadlocki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1