Non penso proprio che esistano alternative: il client deve rimanere attivo e con gli stream aperti finchè essi non sono più utili. Gli stream di I/O non sono più utili nel monento in cui cli client non deve più ricevere/inviare dati. Quindi uno stream di output va chiuso solo quando il client non deve più inviare dati, mentre uno stream di input va chiuso solo quando il client non deve pià ricevere dati. Non puoi, quindi, chiudere lo stream di input se il client deve ricevere ulteriori dati dal server.... puoi fare questa scelta: una volta che il client ha ricevuto i dati dal server, se questo client non deve pià riceverne, chiudi gli stream.

I thread, poi, sono stati inventati apposta per evitare che un certo processo appesantisca il lavoro della CPU: un thread, quando è inattivo (temporaneamente bloccato, quindi) viene automaticamente deschedulato e non appesantisce la CPU finchè non è di nuovo il suo turno.

Questo modo di pensare è congeniale proprio nelle architetture di rete (come architetture client/server) in cui una applicazione non può "rubare" troppa CPU, ma compete per essa attraverso i thread.


Ciao.