elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Threads en Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Threads en Java  (Leído 5,719 veces)
alzehimer_cerebral


Desconectado Desconectado

Mensajes: 513



Ver Perfil WWW
Threads en Java
« en: 16 Febrero 2010, 15:19 pm »

Hola a todos,

estoy teniendo problemas para frenar un thread en un programita.  Tengo el thread de mi programa main:

Código
  1. public static void main(String args[]) {
  2.        java.awt.EventQueue.invokeLater(new Runnable() {
  3.            public void run() {
  4.                new Gui().setVisible(true);
  5.            }
  6.        });
  7.    }

Y luego en un metodo creo otro thread que sirve para descargar un fichero de un servidor:

Código
  1. ThreadForDownload thread = new ThreadForDownload(urli,global.GlobalApplicationDirectories.prueba);
  2.        thread.start();
  3.        //Aqui quiero frenar la ejecucion hasta que thread termine de hacer la descarga

Como puedo frenar la ejecucion en el punto que he comentado??  La cuestion seria frenar el thread del main hasta que terminase el thread de la descarga...  Lo unico que no tengo objeto del thread que se crea en el main..

Que me aconsejais??

Salu2

alzehimer_cerebral


En línea

Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com
-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
Re: Threads en Java
« Respuesta #1 en: 16 Febrero 2010, 16:39 pm »

Para que creas un hilo dentro del main o sea main de por sí ya es un hilo, de igual modo, tienes varias opciones para detenerlo.

Puedes crear un método detenedor de hilos y usar this o puedes poner una variable booleana en true y mientras esté en true el main estará detenido, etc.

Tienes la palabra clave this, puedes usarla para muchas cosas.

PD: Por otro lado, si vas a tener los 2 threads, deberías crear 2 clases para cada thread y llamarlos donde los necesites.


« Última modificación: 16 Febrero 2010, 16:42 pm por -Ramc- » En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
alzehimer_cerebral


Desconectado Desconectado

Mensajes: 513



Ver Perfil WWW
Re: Threads en Java
« Respuesta #2 en: 16 Febrero 2010, 17:52 pm »

Yo no creo ningun thread en el main, tan solo llamo al constructor de la GUI....  Precisamente solo creo un thread en un metodo de la clase GUI.  Mientras se ejecuta el thread quiero que el thread creado por defecto en el main se quede a la espera.

Me parece interesante lo del metodo detenedor de hilos, pero la cuestion es que no se como hacer refencia al hilo por defecto que crea main, es ahi donde estoy teniendo problemas.  Donde esta declarado dicho thread por defecto??  Como se llama?? 

Haber si podeis poner un ejemplo o algo.

Un saludo y gracias por la respuesta.

alzehimer_cerebral
En línea

Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com
-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
Re: Threads en Java
« Respuesta #3 en: 16 Febrero 2010, 18:04 pm »

Citar
static Thread   currentThread()
          Returns a reference to the currently executing thread object.
En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
alzehimer_cerebral


Desconectado Desconectado

Mensajes: 513



Ver Perfil WWW
Re: Threads en Java
« Respuesta #4 en: 16 Febrero 2010, 19:33 pm »

Okis.  Al final a quedado asi:
Código
  1. Thread th =null;
  2.  
  3.        th = Thread.currentThread(); // We suspend the main thread
  4.  
  5.  
  6.  
  7.        ThreadForDownload thread = new ThreadForDownload(urli,global.GlobalApplicationDirectories.prueba);
  8.  
  9.        try {
  10.            Thread.sleep(10000);
  11.            thread.start();
  12.            //Aqui quiero frenar la ejecucion hasta que thread termine de hacer la descarga
  13.        } catch (InterruptedException ex) {
  14.            Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
  15.        }

Alternativas para no dormir el thread??  Por ejemplo que cuando el thread de descarga finalize mande una señal que despierte al principal.  He visto que el thread de descarga puede mandar un notify() al finalizar para despertar los threads en wait().

Cuando lo intento incorporar me salta la siguiente excepcion: Exception in thread "AWT-EventQueue-0" java.lang.IllegalMonitorStateException

Alguien podria ilustrar algun ejemplo de esto, no he encontrado nada claro en la red.

Salu2.

alzehimer_cerebral
En línea

Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com
Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Threads en Java
« Respuesta #5 en: 16 Febrero 2010, 20:18 pm »

Aver tienes que colocar esto en tu GUI    

Código
  1. try {
  2. synchronized (this) {
  3. /**
  4. * Inicias el Hilo para descarga una ves finalizado
  5. * dentro del Hilo de descarga notificas a la gui
  6. *
  7. * synchronized (gui) {
  8. * gui.notify();
  9. * }
  10. *
  11. */
  12. this.wait();
  13. }
  14. } catch (InterruptedException e) {
  15. // TODO Auto-generated catch block
  16. e.printStackTrace();
  17. }
  18.  
Un saludo!
En línea

-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
Re: Threads en Java
« Respuesta #6 en: 16 Febrero 2010, 20:19 pm »

Sí, notify y wait, van dentro de un synchronized.
En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Threads en Java
« Respuesta #7 en: 18 Febrero 2010, 02:53 am »

Con .Join frenas la ejecucion del programa principal hasta que el Thread que le has dado el .Join, salga del metodo "start"
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Threads Affinity!
Programación C/C++
Khronos14 1 4,285 Último mensaje 29 Agosto 2011, 05:02 am
por pucheto
Problema con Threads en Java
Java
Norochii 3 4,856 Último mensaje 23 Septiembre 2013, 10:46 am
por Norochii
Duda con pool de threads en java
Java
xoker 0 1,659 Último mensaje 11 Enero 2014, 20:50 pm
por xoker
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines