Il fatto che la tua classe di partenza sia in esecuzione mi fa pensare a un ciclo di while che continua fino al verificarsi di una certa condizione. Fino a quando va tutto bene la condizione è vera. Quando capita l'eccezione, la condizione diventa falsa e il while termina.

Così al volo mi viene in mente questa soluzione (non garantisco la conformità con gli standard architetturali vigenti):

Il thread cattura le eccezioni e nella clusola di catch viene invocato un metodo statico della classe di partenza ( public static void bloccaEsecuzione() )

La classe di partenza avrà una variabile statica (private static boolean inEsecuzione) che inizialmente sarà settata a true e che è la condizione di esecuzione del ciclo di while menzionato prima.
Il metodo bloccaEsecuzione setta inEsecuzione a false. In questo modo la classe di partenza dovrebbe terminare l'iterazione di while in esecuzione e poi bloccarsi.

Sulla carta mi sembra che possa funzionare. In pratica...