¿Debo crear un nuevo hilo para cada lectura / escritura sobre Socket?

Estoy escribiendo una aplicación simple para que un teléfono Android se comunique con una PC a través de una conexión de socket.

El teléfono puede escribir o recibir un mensaje en cualquier momento, y la computadora también. La solución que he usado hasta ahora funciona así:

Create a thread and call READ in it.
Run an infinte loop.
    Check if thread has finished,
        If so grab the READ and process,
        Then start a new thread also calling read.
    Check to see if another object working in another thread wants to write,
        If so grab and write.

Específicamente, estoy usando AsyncTask de la API de Android para ejecutar los hilos.

Todo funciona bien, pero me pregunto si crear un nuevo hilo para cada LECTURA es una codificación demasiado pesada y / o mala en el rendimiento, y si es así, cómo puedo reutilizar el mismo hilo para tener el mismo comportamiento.

Alternativamente, ¿hay una mejor manera de manejar esta situación en general?

Gracias de antemano por cualquier consejo!

Respuesta 1

Sí, crear un nuevo hilo para cada lectura es extremadamente ineficiente para su necesidad descrita.

En cambio, considere crear un solo hilo, un List<your data type>para retener lecturas y un semáforo para marcar que los datos están disponibles. Su hilo lee cada mensaje, lo coloca en la lista y publica el semáforo en lo que sea que esté esperando datos. Ese 'lo que sea' luego recibe lo que está en la lista hasta que lo vacía, luego vuelve a esperar en el semáforo.

Respuesta: 2

Tengo un programa Java donde se declaran algunas declaraciones SQL como en este método: public ObservableList <TSTTimeZoneConversion> retrieveTimeZoneConversions () arroja TSTDBException {...

Me gustaría invocar una operación de pegado con mi aplicación Java. ¿Es esto posible sin usar Robot? Por ejemplo, la aplicación invocaría una operación de pegar de vez en cuando, así que cuando estoy ...

Tengo una transmisión PCM de 48 kHz y quiero transmitirla a un reproductor compatible de 44,1 kHz (AirPlay de Apple). Alguien sabe si esto "simplemente funciona porque algunos bytes se perderían", o si tengo que hacer un ...

Tengo un andador como este: function: ^ (FUNCTION_TOK fcname = IDENTIFIER param = functionParameters *) {a_param_arrayList.add (param); }; functionParameters devuelve [Object sth]: ^ ...