Se implementi due thread uno per il server l'altro per il client, supponiamo di mettere una variabile booleana(condizione) che assume true quando il server ha qualcosa da inviare e false altrimenti.
Metti in attesa passiva il thread client con un ciclo progettualmente come questo(prima del codice vero e proprio del thread) :
codice:
while (condizione == false) //oppure (!condizione)
wait();
// codice thread-client
Poi nel thread server metti questo alla fine o quando vuoi, dipende dal programma che devi fare, insomma dopo che hai percepito che ha qualcosa da inviare:
codice:
// codice thread-server
condizione = true;
notifyAll();
Così il server avverte il thread-client sincronizzato (li devi sincronizzare con synchronized) che ha qualcosa da inviare.. la condizione diventa true quindi, il client non va in wait, e esegue il codice che c'è sotto!
Sono stato un po' frettoloso ma penso di essere stato chiaro!
Questo è il metodo consigliato, sfrutta un'attesa passiva.. volendo se non riesci puoi utilizzare un'attesa attiva, ma mantiene costantemente il mutex impegnato e quindi sukkia risorse al processore!
Io ti consiglio di fare in questo modo!
ciao
PS: non dimenticare che tutti i metodi dei thread vanno nel blocco try{}catch{Exception} ma penso che lo sai! Hanno eccezioni da gestire di default, la classe da invocare è IOException mi pare..