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

Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo con run()

Estas en el tema de Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo con run() en el foro de Java en Foros del Web. Si buenas esa es mi pregunta, me gustaría saber cual es la diferencia entre esos dos es urgente, De antemano Muchas gracias!...
  #1 (permalink)  
Antiguo 25/02/2010, 04:03
 
Fecha de Ingreso: mayo-2008
Ubicación: Sevilla - España
Mensajes: 140
Antigüedad: 14 años
Puntos: 1
Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo con run()

Si buenas esa es mi pregunta, me gustaría saber cual es la diferencia entre esos dos es urgente,



De antemano Muchas gracias!
  #2 (permalink)  
Antiguo 25/02/2010, 04:24
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 13 años, 8 meses
Puntos: 188
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Bueno, en sí el método run() contiene el código a ejecutar en un thread, mientras que el método start() es el que lanza el thread.

Si tienes un hilo funcionando (es decir, ejecutando su metodo run), y quieres iniciar uno nuevo, tienes que crear un nuevo Thread, llamemosle hilo2, y llamar a su método start() para que se inicie. Luego el hilo2 ya ejecutará el método run().
  #3 (permalink)  
Antiguo 25/02/2010, 07:42
 
Fecha de Ingreso: mayo-2008
Ubicación: Sevilla - España
Mensajes: 140
Antigüedad: 14 años
Puntos: 1
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

La cosa es que, me dijeron que porque el método run no es bueno sincronizarlo y pregunte donde estoy haciendo el curso y me dijeron que tenía que notar esa diferencia, eso que me dijisté lo entiendo, si hay 2 hilos y cada uno llama el método run, son instancias diferentes y cada uno ejecutará el método run, pero cual sería el problema si yo sincronizo el método run?
  #4 (permalink)  
Antiguo 25/02/2010, 08:44
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Hola, si lanzas el hilo llamando al mètodo run() el hilo no se ejecutarà de forma asincrònica, deberàs esperar a que este termine... No debes iniciar el hilo llamando a este método, debes iniciarlo con start()
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #5 (permalink)  
Antiguo 25/02/2010, 08:47
 
Fecha de Ingreso: mayo-2008
Ubicación: Sevilla - España
Mensajes: 140
Antigüedad: 14 años
Puntos: 1
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Como asi no te entendí eso ultimo, podrías mostrarme con un ejemplo, jaja si no es molestia!!!
  #6 (permalink)  
Antiguo 25/02/2010, 08:55
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

prueba haciendo lo siguiente

class hilo extends Thread{
public void run(){
Thread.sleep(10000);
}
}

llama al hilo asì

hilo myhilo= new hilo();

System.out.println("inicio");
myHilo.run();
System.out.println("fin");


prueba cuanto te demora en aparecer la palabra fin
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #7 (permalink)  
Antiguo 25/02/2010, 09:00
 
Fecha de Ingreso: mayo-2008
Ubicación: Sevilla - España
Mensajes: 140
Antigüedad: 14 años
Puntos: 1
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Ah no siiii eso te lo entiendo, pero eso tiene algo que ver con la sincronización?
  #8 (permalink)  
Antiguo 25/02/2010, 09:42
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 13 años, 6 meses
Puntos: 13
De acuerdo Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

tu preguntaste la diferencia entre ejecutar run y start, ahora la cosa cambia si por ejemplo creas 2 hilos desde la misma clase que implementa Runnable (no Thread)

class MyRunnable implements Runnable { public synchronized void run() {
codigo que te puse antes
} }


en el main llama a esto
Código Javascript:
Ver original
  1. System.out.println("inicio");
  2.          MyRunnable  hilo = new MyRunnable ();
  3.                 Thread t1 = new Thread(hilo);
  4.                 Thread t2 = new Thread(hilo);
  5.                 t1.start();
  6.                t2.start();
  7.         System.out.println("fin");
  8.     }
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #9 (permalink)  
Antiguo 25/02/2010, 09:51
 
Fecha de Ingreso: mayo-2008
Ubicación: Sevilla - España
Mensajes: 140
Antigüedad: 14 años
Puntos: 1
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Y porque no pasa lo mismo con la clase Thread?
  #10 (permalink)  
Antiguo 25/02/2010, 10:02
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Primero: Thrad (que tambièn implementa Runnable) es una clase y Runnable es una interfaz (no tiene implementacion), si tu creas dos Threads (con new Thread(hilo)) y en su constructor le pasas una instancia de una clase que implemente Runnable, en memoria, le estàs pasando la misma direcciòn y con synchronized estàs obteniendo un bloqueo sobre ese recurso (el metodo run()), con una clase que extienda Thread eso es imposible, porque Thread es la representaciòn del hilo en sì, no puede ejecutarse 2 veces al mismo tiempo con la misma instancia, no tiene sentido que el metodo run estè sincronizado o no, es lo mismo, el bloqueo es innecesario... entiendes?
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #11 (permalink)  
Antiguo 25/02/2010, 10:27
 
Fecha de Ingreso: mayo-2008
Ubicación: Sevilla - España
Mensajes: 140
Antigüedad: 14 años
Puntos: 1
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Haber lo que entiendo es que al crear un hilo con la clase thread extendida, estoy creando 2 instancias dos hilos aparte, si implemento dos hilos con una interfaz runnable los dos llevan la misma dirección osea la misma interfaz, por tal motivo a la hora de hacer el synchornized en el método run() este pone en espera a cada hilo,,, lo que no pasa Con la clase Thread bueno creo estoy en lo correcto, ajaja estoy aprendiendo más acá que en el curso de hilos que estoy haciendo
  #12 (permalink)  
Antiguo 25/02/2010, 10:35
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Exacto! Me alegro que hayas entendido, la cosa con los hilos se pone bastante compleja cuando tienes muchos hilos, intenta no abusar de èstos, en realidad el uso de synchronized no es lo mejor, es mas elegante el uso de monitor para manejar el bloqueo de recursos limitados, pero eso lo dejamos para cuando entres en el tema...
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #13 (permalink)  
Antiguo 25/02/2010, 10:37
 
Fecha de Ingreso: mayo-2008
Ubicación: Sevilla - España
Mensajes: 140
Antigüedad: 14 años
Puntos: 1
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

Muchas gracias por tu ayuda de verdad Dios te bendiga muchisimas gracias :)
  #14 (permalink)  
Antiguo 25/02/2010, 10:40
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: Cual es la diferencia que existe entre iniciar un hilo (start) y correrlo

de nada, un gusto haberte ayudado
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy

Etiquetas: diferencia, existe, hilo, iniciar, start
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 11:00.