Czasowe wykonywanie wątku

0

Jaką funkcję wykorzystać żeby wątek wykonywał się przez np. 10 sekund i po upływie tego czasu zmiana wątku?

Mogę na przykład usypiać wątki, ale raczej chciałbym się dowiedzieć czy istnieje jakiś sposób na wykonanie ich tak:

Wykonuj wątek przez n sekund, przejdź do innego, wykonuj przez n sekund i przejdź do kolejnego.

1

moze powiedz jaki jest przypadek uzycia bo troche to sie kloci z idea wspolbieznosci

0

Chcę stworzyć opcje stopera dla Tabaty.
Przez 10 sekund ćwiczenia a przez 20 sekund odpoczynek.
Myslałem o dwóch rozwiązaniach.
W pierwszym mam dwa pola tekstowe i po upływie 10 lub 20 sekund odpowiedni wątek jest usypiany na czas drugiego zegara.
W drugim rozwiązaniu mam jedno pole tekstowe dla jednego zegara i po upływie odpowiedniej ilości czasu zegar jest zerowany i nalicza czas od początku.
I tutaj własnie przyda się funkcja, dzięki której będę mógł wyzerować zegar po upływie odpowiedniego czasu.
Wydaje mi się że tutaj będzie potrzebny jeden wątek o ile taka metoda istnieje.

0
Crash89 napisał(a):

Przez 10 sekund ćwiczenia a przez 20 sekund odpoczynek.

Tabata to 20 sekund ultra-intensywnego cwiczenia i 10 sekund odpoczynku.

0

Ja bym to zrobil tak:
a) pole tekstowe na caly ekran z cyferka pokazujaca dany cykl
b) 10 sekundowe przerwy - pole ma kolor zielony
c) 20 sekundowe cwiczenie - pole ma kolor czerwony
Czyli: caly ekran zielony/czerwony, z jakims bialym numerkiem wystarczajaco duzym.
d) wlaczasz zaczynasz od cwiczenia, i uzywasz np ExecutorService zeby za 20 sekund sie cos wykonalo; to cos to runnable, ktore zmienia kolor pola tekstowego, i rejestruje nastepny runnable za 10 sekund; jesli to jest ostatni cykl, to runnable zmieni wyglad zeby pokazac ze juz koniec, w przeciwnym razie wykonuje to samo co na poczatku aplikacji (czerwone pole) i zmniejsza licznik o 1

Jak to juz bedziesz mial, to mozesz sie pobawic w bajery typu: gdy pole jest czerwone/zielone, to wraz z uplywajacym czasem robie zmienia sie w zielone/czerwone aby pokazac uplywajacy czas.

0

alternatywnie zamiast bawic sie watkami mozesz po prostu uzyc java.util.Timer

0
the real mućka napisał(a):
Crash89 napisał(a):

Przez 10 sekund ćwiczenia a przez 20 sekund odpoczynek.

Tabata to 20 sekund ultra-intensywnego cwiczenia i 10 sekund odpoczynku.

No fakt, na odwrót napisałem, w programie będzie prawidłowa kolejność.

Dzięki za rady i dobre pomysły.
Czyli wychodzi na to że w Tabacie będą 4 wątki.
Główny, wątek ze stoperem(Mam też do wyboru zwykły stoper, wykorzystam po prostu tą klasę)oraz dwa Runnable ze zmianą kolorystyki.
A tamte będą po prostu usypiane i wybudzane.
Choć mógłbym też wykorzystać Semaphory i je zapętlić 8 razy.

Z Timera na razie zrezygnuję.

Dodam że robię to na androida.

Najpierw spróbuję to zrobić i jak będą problemy to napiszę.

0

W sumie z tego co zrozumialem moja i inne wypowiedzi, to tutaj w zupelnosci wystarcza 2 watki: watek glowny aplikacji/UI thread, oraz jeden watek ktorym zarzadza np. singleThreadExecutor, do tego 2 runnable (ktore nie sa watkami). Runnable, jako ze beda wykonane w watku innym niz main thread, musza jakos umiec wysylac cos z powrotem do ui thread, najlatwiej to zrobic za pomoca metod Handler#post albo Activity#runOnUIThread albo podobne. Zadne semafory, zadne synchronizacje itp. nie sa tutaj potrzebne.

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