Przerywanie wątku

0

Cześć,
w instrukcji switch-case wywołuje sobie wątek. Przy ponownej próbie wywołania oczywiście wywala błąd. Jak to można obejść?

case 1: {
					System.out.println("Jaką temperaturę chcesz ustawić? Obecnie jest: "+data.getCurrentTemperature()+"\"C");
					data.setTemperature(keyboard = read.nextInt());
					temperature.start();
					break;
				}
0
saller napisał(a):

Cześć,
w instrukcji switch-case wywołuje sobie wątek

Co to znaczy?
Bo ja tu widzę tylko pobranie aktualnej temperatury i ustawienie nowej z klawiatury.
Jaki wyjątek leci?

0

"java.lang.IllegalThreadStateException"
Chodzi o to, że wywołuję temperature.start(); za każdym razem gdy wchodzę do case. Dodałem sobie funkcję data.setTemperature(), bo nie wiem jak bezpośrednio do metody run() przekazać wartość.

Edit:

Exception in thread "main" java.lang.IllegalThreadStateException
	at java.lang.Thread.start(Thread.java:705)
	at testWatki.Main.main(Main.java:35)
1

Na pojedynczym obiekcie Thread metodę start można wywołać tylko jeden raz. Aby uruchomić kilka wątków, dla każdego musisz stworzyć nowy obiekt Thread. Poczytaj w internecie o "thread lifecycle".

0
krupnick napisał(a):

Na pojedynczym obiekcie Thread metodę start można wywołać tylko jeden raz. Aby uruchomić kilka wątków, dla każdego musisz stworzyć nowy obiekt Thread. Poczytaj w internecie o "thread lifecycle".

Czy jest jakaś możliwość, żeby zakończyć tą metodę run() i potem jeszcze raz wywołać start()?

1

Tak. Możesz:

  • wstawić jakąś flagę typu np AtomicBoolean do twojej klasy z wątkiem
  • w metodzie run sprawdzać wartość flagi i jeśli się zmieni to wyjść z metody (co jest równoznaczne z zakończeniem wątku)
  • z zewnątrz czekasz na zakończenie wątku za pomocą thread.join()

Jak już ktoś napisał - nie możesz dwa razy wywołać start na jednej instancji Thread, więc musisz stworzyć kolejną i na niej dać start.

0

Dla kogoś na przyszłość mogę doradzić, że lepiej wykorzystać klasę Executor. Możliwe, że coś źle robiłem, ale użycie metody thread.join() nie dawało oczekiwanych rezultatów.

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