Foros del Web » Programación para mayores de 30 ;) » Java »

duda sobre threads

Estas en el tema de duda sobre threads en el foro de Java en Foros del Web. Buenas, En todos los ejemplos de multithread que he visto, cada hilo ejecuta el mismo public void run() . Sin embargo lo que yo quiero ...
  #1 (permalink)  
Antiguo 23/03/2007, 10:02
 
Fecha de Ingreso: marzo-2007
Mensajes: 2
Antigüedad: 17 años, 2 meses
Puntos: 0
duda sobre threads

Buenas,

En todos los ejemplos de multithread que he visto, cada hilo ejecuta el mismo public void run().

Sin embargo lo que yo quiero es leer los datos del puerto serie cada X tiempo y guardarlos en un string. Paralelamente, cada vez que se conecta un cliente quiero mandarle ese string. Lo que no quiero es que cada vez que se conecte un cliente lea los datos del puerto serie.

No estoy seguro de que necesite usar los threads. Me podriais aclarar algo acerca de esto?
  #2 (permalink)  
Antiguo 23/03/2007, 19:23
 
Fecha de Ingreso: marzo-2007
Mensajes: 80
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: duda sobre threads

Puedes hacer un thread especial para leer y uno para enviar segun el caso
  #3 (permalink)  
Antiguo 24/03/2007, 00:06
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: duda sobre threads

Hola:

Necesitas o no threads dependiendo de si el puerto serie o el cliente pueden esperar. Si no usas threads, sólo puedes atender a uno a la vez, leer del puerto serio o enviar al cliente, por lo que sería atendidos por "turnos". Si esto es aceptable, no necesitas threads.

No conozco como se habla con un puerto serie, pero si es similar a sockets, cuando hagas read() de un puerto serie y no haya datos, la llamada se quedará ahí, a la espera. Si esto es así, cuando estes esperando datos del puerto serie, no atenderás clientes, puesto que estás bloqueado en el read(). Para evitarlo y no usar threads, deberías hacer algún tipo de "pregunta" al puerto serie de si tiene datos disponibles antes de leerlos. Esto en general no es eficiente. En vez de tener el proceso dormido mientras no tiene nada que hacer, lo tienes continuamente preguntando al puerto serie si hay datos.

Por ello, lo habitual suele ser tener dos hilos. Uno atiende el puerto serie y pone lo que lee en algún sitio accesible. Otro hilo atiende al cliente y le manda los datos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 30/03/2007, 07:16
 
Fecha de Ingreso: marzo-2007
Mensajes: 2
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: duda sobre threads

Muchas gracias por las respuestas.

Ahora me surge otra duda. Se pueden compartir variables entre dos hilos? Es que la única forma de compartir datos entre threads que he visto es la de productor-consumidor sincronizados.
  #5 (permalink)  
Antiguo 30/03/2007, 08:30
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: duda sobre threads

Hola:

Cuando haces un hilo puedes hacer una clase que herede de Runnable o de Thread. En ambos casos, con su método run().

A esa clase puedes ponerle métodos set() y get() para pasar/recuperar otros tipos de datos, los que tú quieras. Una vez creados los hilos, puedes pasarles a los dos los mimos datos.

Si uno de esos datos es otra clase (un solo new que pasas a los dos), la compartiran, de forma que si uno hace cambios en ella, el otro los puede ver. Eso sí, tienes que tener cuidado que uno no escriba datos mientras el otro los lee a la vez, por ello los temas de sincronización y lo productor-consumidor.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 30/03/2007, 14:47
Avatar de DebMaster  
Fecha de Ingreso: marzo-2007
Ubicación: La Habana,Cuba
Mensajes: 19
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: duda sobre threads

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Cuando haces un hilo puedes hacer una clase que herede de Runnable o de Thread. En ambos casos, con su método run().

A esa clase puedes ponerle métodos set() y get() para pasar/recuperar otros tipos de datos, los que tú quieras. Una vez creados los hilos, puedes pasarles a los dos los mimos datos.

Si uno de esos datos es otra clase (un solo new que pasas a los dos), la compartiran, de forma que si uno hace cambios en ella, el otro los puede ver. Eso sí, tienes que tener cuidado que uno no escriba datos mientras el otro los lee a la vez, por ello los temas de sincronización y lo productor-consumidor.

Se bueno.
Beuno segun tengo entendido , Runnable es una interface , no una clase, he visto que Thread si es una clase .
Saludos
  #7 (permalink)  
Antiguo 31/03/2007, 00:52
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 5 meses
Puntos: 43
Re: duda sobre threads

También el modificador volatile te puede ser de ayuda si vas a estar modificando propiedades de la misma instancia en 2 Threads, este modificador es solo aplicado a las propiedades de una clase, es algo similar a la sincronización de bloques de código, pero en este caso sincronizas una variable miembro.

Un saludo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:05.