Вы можете настроить систему «обратного вызова», чтобы уведомлять пользовательский интерфейс о завершении потоков. Иметь класс, расширяющий Thread, и передавать ему ссылку на класс, который должен быть вызван в конце. Если у вас есть список таких классов, о которых нужно уведомить, создайте Vector в реализации Thread для их хранения. Переопределите функцию run и, выполнив все, что вам нужно сделать, просто вызовите метод класса UI (итерируя вектор, если это необходимо). Таким образом, ваши занятия могут выглядеть так:
public class commThread extends Thread{
MyUIClass callbackObj;
public commThread(MyUIClass myUiClass){
callbackObj = myUiClass;
}
public void run(){
//do stuff
callbackObj.callback();
}
}
и ваш класс пользовательского интерфейса:
public MyUIClass{
public void callback(){
//refresh the UI
}
}
Конечно, если у вас несколько потоков, работающих одновременно и вызывающих один и тот же объект пользовательского интерфейса, обязательно синхронизируйте метод обратного вызова.
Надеюсь, это поможет!