Kolejka wątków

Kolejka wątków
M2
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 lat
  • Postów:7
0

Witam
Od pewnego czasu zastanawia mnie temat kolejki, która będzie przechowywała wątki stworzone przez zdarzenia w programie, ale nie uruchomione. Kolejka działała by jak fifo, czyli po skończeniu wątek jest usuwany z kolejki, a następnie jest uruchamiany kolejny. Czy java dostarcza biblioteki dla takiego problemu? Czy posiada ktoś jakiś tutorial z przykładami?
Dzięki!!

LN
  • Rejestracja:około 16 lat
  • Ostatnio:około rok
  • Postów:1398
0

Tak, poczytaj o ThreadPool, Executorach, itp.

0

Zamiast budowac takie cos, sprobuj np. klas z pakiety java.util.concurrent - tam jest pelno Executorow i innych 'prymitywow' do obslugi watkow.
Sam pomysl kolejki watkow jest kiepski - jak juz musisz cos kolejkowac sam, to lepiej nie watki (kazdy watek zabiera zasoby systemowe) a raczej Runnable czy jakies inne Callable.

Kerai
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:London
0

po skończeniu wątek jest usuwany z kolejki, a następnie jest uruchamiany kolejny

Jaki to ma sens?

__krzysiek85
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 9 lat
  • Postów:1019
1

Potrzebujesz kolejki zadań, nie kolejki wątków.
Zadania możesz trzymać np. w ArrayBlockingQueue jako obiekty Runnable


Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5
edytowany 2x, ostatnio: __krzysiek85
M2
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 lat
  • Postów:7
0

Dzięki za podpowiedź.
Sens kolejki jest taki że: każdy wątek wysyła i odbiera z portu szeregowego pewne dane i wykonuje zapis w bazie danych. W przypadku kiedy jeden wątek nie zakończył zadania, a drugi został stworzony od zdarzenia np cyklicznego to zostanie umieszczony w takiej kolejce aby nie stworzyć konfliktu na porcie i nie pogubić <ort>hronologii ŁAPKI OBETNĘ TUŻ PRZY DUPIE ZA TAKIE BŁĘDY</ort> odczytu/zapisu z portu. Czy ma to sens... pewnie jakiś ma i zależy od częstości wywołań. Zapewne problem można inaczej rozwiązać.
Pozdr!

edytowany 1x, ostatnio: ŁF
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:18 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
1

Executors.newSingleThreadExecutor() > http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executors.html#newSingleThreadExecutor%28%29 kolejkuje wywołania. Względnie można sięgnąć do kodu źródłowego, zobaczyć jak tworzony jest executor i podmienić kolejkę na taką jaka jest potrzebna.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
__krzysiek85
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 9 lat
  • Postów:1019
1
marolo2 napisał(a)

Dzięki za podpowiedź.
Sens kolejki jest taki że: każdy wątek wysyła i odbiera z portu szeregowego pewne dane i wykonuje zapis w bazie danych. W przypadku kiedy jeden wątek nie zakończył zadania, a drugi został stworzony od zdarzenia np cyklicznego to zostanie umieszczony w takiej kolejce aby nie stworzyć konfliktu na porcie i nie pogubić hronologii odczytu/zapisu z portu. Czy ma to sens... pewnie jakiś ma i zależy od częstości wywołań. Zapewne problem można inaczej rozwiązać.
Pozdr!

Tak, jak pisałem - w kolejce powinny być zadania, nie wątki.
Wątki odczytujące z portu szeregowego powinny tworzyć zadania i umieszczać je w kolejce ArrayBlockingQueue. Dodatkowo istniałby jeden wątek, którego jedynym zadaniem byłoby pobieranie zadań z tej kolejki i ich procesowanie (np. zapis do bazy).

Najlepiej ten pojedynczy wątek stworzyć jako Executor, poprzez newSingleThreadExecutor (tak, jak sugeruje Koziołek).


Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5
edytowany 1x, ostatnio: __krzysiek85
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:18 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

@__krzysiek85, executory działają tak jak opisujesz. Tworzony jest wątek i kolejka Runnable do której wrzucane są obiekty przekazane przez użyszkodnika. Nie ma potrzeby tworzenia dodatkowego wątku, bo executor już go stworzył.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
0

Tak, executory dzialaja jak mowi Koziolek i Krzysiu. Tak, one naprawde tak dzialaja.

Panowie, temat wyczerpany chyba?

M2
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 lat
  • Postów:7
0

Wydaje się być wyczerpany. Muszę się zapoznać z tymi mechanizmami.
Dzięki!
Pozdrawiam!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.