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...