Ti consiglio, per i Thread, di implementare Runnable anziché utilizzare proprio una classe derivata da Thread: extends Thread si usa quando si vuole essere sicuri che la classe non estenda altre classi, se è questo il comportamento voluto allora ok. Se ti interessa invece poter derivare (o non escludere a priori questa opzione) usa implements Runnable.

Suppongo che usi o variabili statiche o variabili non private violando le regole di encapsulation e me ne accorgo da qui

codice:
disconnetti = client.terminaChiamata;
che poi non so che senso abbia visto che cmq mantieni un riferimento a client e potresti dedurre il valore ogni volta dal client (più corretto per evitare casini di mancato aggiornamento).

codice:
in = new BufferedReader(new InputStreamReader(stato.getInputStream()));

				esito = in.readLine(); //ECCO, E' QUI AD ASPETTARE UNA EVENTUALE 
DISCONNESSIONE DEL CLIENT E NON SI ACCORGE DELLA PROPRIA
A parte che da qui non si sa se stato è stato inizializzato oppure no (so che esiste la variabile, ma dove la inizializzi? dove apri la connessione al server?).
Usando socket e in particolare questa istruzione, tu apri uno stream in lettura "agganciandoti" (passatemi il termine) all'input stream del socket.
Ora non so dove lo istanzi/usi, ma se non hai un server remoto a cui ti colleghi tramite socket e da cui invii il comando quit dubito che funzioni.
Ci sarebbero altre note poco chiare su quello che fa il codice, ma per adesso sorvoliamo

Infine di cosa non si accorge? Mica tu dal client puoi scrivere quit e lo ricevi tramite socket!!!