Hola:
La solución estándar es esa, un hilo por cliente. No sé por qué dices que se debe evitar usar hilos. Los hilos es como todo, sirven para determinadas cosas y hay que usarlos cuando es necesario y evitarlos si no es necesario, por aquello de no matar moscas a cañonazos.
Para atender varios clientes hay varias aproximaciones, pero la de hilos es la más normal.
- Puedes tener un solo hilo e ir por turnos atendiendo a los clientes. Esto introduce retardos en el cliente, puesto que debe esperar que le toque su turno.
- Puedes poner hilos, uno por cliente.
En este enlace tienes un ejemplo con hilos
http://www.chuidiang.com/java/socket...cket_hilos.php
Se bueno.