• Jueves 14 de Noviembre de 2024, 07:59

Autor Tema:  Re: Threads  (Leído 1435 veces)

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Threads
« en: Miércoles 14 de Julio de 2004, 15:13 »
0
Hola a todos!!

Escribi esto mismo en lawebdelprogramador, en programmersheaven, sun y no se cual es la respuesta:

Desarrolle una clase que lanza hilos. Cada uno de esos hilos lanza dos hilos sincronizados (se comunican entre si mediante una cola). Cada uno de estos dos hilos son dos servidores que atienden clientes por puertos distintos. Por lo tanto, por parametro del constructor le mando los puertos por los cuales deben escuchar. El problema es q por el momento estoy largando dos hilos q a su vez largan dos hilos sincronizados cada uno. Bueno, lo q esta ocurriendo es q efectivamente estoy largando dos pero luego, cada uno de los hilos escucha por el mismo puerto. Como me doy cuenta??? porque tiro mensajes por pantalla ya que debuggear esto es casi imposible porque se va de hilo en hilo y uno no sabe donde esta.
Voy a pedar algo de codigo:

JAdministradorTranServers.java:
(esta es la clase que larga el hilo y le paso dos puertos distintos)
Código: Text
  1.  
  2. new JTranServerThread(listaPuertos.getItem(i).getIdentificador(), puerto);
  3.  
  4.  

JTranServerThread.java:
(esta es el hilo que larga los dos hilos sincronizados)
Código: Text
  1.  
  2. public class JTranServerThread extends Thread
  3. {
  4.   /** Puerto por el cual escuchara el JServidorDataEntry */
  5.   private int puertoDataEntry    = 0;
  6.   /** Puerto por el cual escuchara el JServidorDataEntry */
  7.   private int puertoPVC          = 0;
  8.  
  9.   /** @param puertoDataEntry  Puerto por el cual escuchara el servidor del Data Entry
  10.    *  @param puertoPVC Puerto por el cual se conectara al PVC*/
  11.   public JTranServerThread(int puertoDataEntry, int puertoPVC)
  12.   {
  13.     this.puertoDataEntry = puertoDataEntry;
  14.     this.puertoPVC       = puertoPVC;
  15.     start();
  16.   }
  17.  
  18.   /** Metodo que lanzara una thread */
  19.   public void run()
  20.   {
  21.     JServidorDataEntry servidorDataEntry = new JServidorDataEntry(puertoDataEntry);
  22.     new JServidorPVC(servidorDataEntry, puertoPVC);
  23.  
  24.     System.out.println("Estoy en el run de JServerThread");
  25.     System.out.println("Puerto PVC:        " + puertoPVC);
  26.     System.out.println("Puerto Data Entry: " + puertoDataEntry);
  27.   }
  28. }
  29.  
  30.  

Bueno, lo q esta pasando, es que servidorDataEntry es largado dos veces efectivamente pero ambas veces escucha por el mismo puerto. Lo mismo ocurre con JServidorPVC.
Si alguien sabe q pasa por favor escucho ideas. Si en vez de "extender" a Thread, debo implementar "runneable" lo hago, pero necesito AYUDAAAA

Salu2!!!!!!!!!!!

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Threads
« Respuesta #1 en: Miércoles 14 de Julio de 2004, 16:05 »
0
Hice algo mas y sigue haciendo el mismo error:

Código: Text
  1.  
  2. JServidorDataEntry servidorDataEntry = new JServidorDataEntry(3000);
  3. new JServidorPVC(servidorDataEntry, 4000);
  4.  
  5. JServidorDataEntry servidorDataEntry1 = new JServidorDataEntry(3001);
  6. new JServidorPVC(servidorDataEntry1, 4001);
  7.  
  8.  

Y larga solo los dos ultimos hilos pero no los primeros y no se por q?????

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Threads
« Respuesta #2 en: Miércoles 14 de Julio de 2004, 17:23 »
0
Ya mas o menos lo tengo

Salu2!!!!!!!!!!!!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Threads
« Respuesta #3 en: Jueves 15 de Julio de 2004, 05:32 »
0
la verdad no tengo mucho tiempom para revisar lo que estas haciendo, pero es muy probable a que este sucediendo porque tus rutinas estan sobreescribiendo el area de memoria unas con otras..
asi que al momento de inicializar los puertos deberias hacerlo ingresando a un area critica para lo cual deberias manejar los semaforos mas conocidos como MUTEX, de tal manera que los hilos esperen hasta que el que esta en el area critica creando el puerto salga de alli para luego cada uno entrar tambien al area critica y hacer lo correspondiente por turnos..
y luego todos continuar su ejecucion normalmente.. es solo una idea...
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io