Poniższy kod prowadzi do java.lang.IllegalThreadStateException: Thread already started
sytuacji, gdy wywołałem start()
metodę po raz drugi w programie.
updateUI.join();
if (!updateUI.isAlive())
updateUI.start();
Dzieje się to za drugim razem updateUI.start()
. Przechodziłem przez to wiele razy, a wątek jest wywoływany i całkowicie biegnie do końca przed uderzeniem updateUI.start()
.
Wywołanie updateUI.run()
pozwala uniknąć błędu, ale powoduje, że wątek działa w wątku interfejsu użytkownika (wątku wywołującym, jak wspomniano w innych postach na SO), co nie jest tym, czego chcę.
Czy wątek można uruchomić tylko raz? Jeśli tak, to co mam zrobić, jeśli chcę ponownie uruchomić wątek? Ten konkretny wątek wykonuje obliczenia w tle, jeśli nie robię tego w wątku, to jest to robione w wątku interfejsu użytkownika, a użytkownik ma nieuzasadnione długie oczekiwanie.