Un modo potrebbe essere questo:
nella classe Runnable dove hai il metodo run fai:
boolean esegui = true;
public void run(){
while(esegui){
// qui metti il codice da eseguire....
Thread.sleep(10);
}
}
public void fermaThread(){
esegui = false;
}
quando chiami il metodo fermaThread viene interrotta l'esecuzione del thread.
Crei poi un timer che viene avviato assieme al thread e dopo X secondi controlla se il messaggio è stato inviato, se non è stato inviato fermi il thread e lanci un eccezione !!
occhio che sono andato a memoria senza provare...