efectivamente , las cosas si se ejecutan en ese orden , lo que no sucede es que se actualize el repintado del textarea hasta que el hilo termina de hacer las acciones te pongo un ejemplo para que puedas solucionar tu problema , a mi me sucedia lo mismo con un jlist
el siguiente codigo lo tengo en un listener de un jbutton
Código:
//declaro la tarea para el hilo
Runnable miRunable = new Runnable(){
@Override
public void run() {
//aqui pongo la accion que tengo declarada como abrir dialogo ,abre
//jchooser , elige un archivo , realiza varias consultas a una bd y hace la
// descarga de un csv de varias tablas al tiempo que debe mostrar el
//avanze en un jlist
Abrir_Dialogo();
}
};
//aqui instanceo un nuevo hilo y le paso la tarea a realizar
Thread hilo = new Thread(miRunable);
//inicio el hilo que al momento arranca , dejando el repintado libre y actualizado
hilo.start();
}
espero te sea de ayuda si tienes alguna duda encontraras mas informacion en internet , existe otro metodo pero ese no lo he manejado , te recomiendo lo busques pues este metodo es algo ya obsoleto pero funcional