Das Problem hatte ich auch...
Ich habe es gelöst, indem ich zuerst im Hauptthread eine boolean Variable eingeführt habe, welche beim Threadstart auf True gesetzt wird. Der Thread selbst setzt diese beim beenden über synchronize wieder auf false. Im Hauptthread habe ich eine boolean Variable "IsClosing", welche onClose auf True gesetzt wird. Der Hauptthread muss dann beim onClose (nachdem IsClosing auf true gesetzt wurde) nur noch warten bis der Thread nicht mehr läuft. Dafür kann man eine While schleife verwenden
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.