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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Cuestión de hilos/concurrencia
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cuestión de hilos/concurrencia  (Leído 2,204 veces)
kur79

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Cuestión de hilos/concurrencia
« en: 30 Enero 2016, 18:40 pm »

Buenas, tengo el programa de dejo abajo y se supone que debe mostrar 5 veces la hora y entonces bloquearse el hilo pero continúa hasta el final del bucle. Sé que debe hacer eso pero no entiendo el por qué. Llevo un par de días atascado en esta cuestión.

Código
  1. public class programaConcurrencia {
  2.    public static void main(String[] args) {
  3.        FileClock reloj= new FileClock();
  4.        Thread hilo=new Thread(reloj);
  5.  
  6.        hilo.start();
  7.  
  8.        try{
  9.            TimeUnit.SECONDS.sleep(5);
  10.        }catch(InterruptedException e){
  11.            e.printStackTrace();
  12.        }
  13.        hilo.interrupt();  
  14.    }
  15. }
  16.  
  17. /////////////////////////////////////////
  18.  
  19. public class FileClock implements Runnable {
  20.  
  21.    @Override
  22.    public void run() {
  23.        for(int i=0;i<10;i++){
  24.            System.out.printf("%s\n",new Date());
  25.            try{
  26.                TimeUnit.SECONDS.sleep(1);
  27.            }catch(InterruptedException e){
  28.                System.out.println("El FileClock se ha detenido.");
  29.  
  30.            }
  31.        }
  32.    }
  33. }
  34.  

Como salida obtengo esto:
Código
  1. Sat Jan 30 11:09:04 CET 2016
  2. Sat Jan 30 11:09:05 CET 2016
  3. Sat Jan 30 11:09:06 CET 2016
  4. Sat Jan 30 11:09:07 CET 2016
  5. Sat Jan 30 11:09:08 CET 2016
  6. El FileClock se ha detenido.
  7. Sat Jan 30 11:09:09 CET 2016
  8. Sat Jan 30 11:09:10 CET 2016
  9. Sat Jan 30 11:09:11 CET 2016
  10. Sat Jan 30 11:09:12 CET 2016
  11. Sat Jan 30 11:09:13 CET 2016
  12. BUILD SUCCESSFUL (total time: 10 seconds)

Acabo de empezar con temas de concurrencia y de java y ando perdido en esto.


En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: Cuestión de hilos/concurrencia
« Respuesta #1 en: 31 Enero 2016, 06:28 am »

Si te fijas bien, tu bucle for esta programado para ejecutarse 10 veces en lugar de 5. Otra cosa que deberías de mejorar. Lo que no logro entender es por qué tu hilo se sigue ejecutando sin y, además, sin lanzar de nueva cuenta la excepción que indica que se ha interrumpido. Lo que te recomiendo hacer es colocar la sentencia que imprime la hora dentro de tu try. Lamento no poder ayudarte más pues no se me da la programación multihilo en java.


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Cuestión de hilos/concurrencia
« Respuesta #2 en: 1 Febrero 2016, 20:12 pm »

Hola kur79 si te vas a la API de Java del método interrupt() verás que:

If this thread is blocked in an invocation of the wait(), wait(long), or wait(long, int) methods of the Object class, or of the join(), join(long), join(long, int), sleep(long), or sleep(long, int), methods of this class, then its interrupt status will be cleared and it will receive an InterruptedException.

Es decir que al estar el hilo bloqueado por una llamada a sleep, lo que haces es deshacer el bloqueo y provocar una Excepción, haciendo que el hilo vuelva a activarse para continuar con su ejecución. Por ese motivo te imprime el mensaje las 5 veces restantes.

Un saludo.
En línea

Regístrate en
MNicolas

Desconectado Desconectado

Mensajes: 127


Developer


Ver Perfil WWW
Re: Cuestión de hilos/concurrencia
« Respuesta #3 en: 2 Febrero 2016, 10:18 am »

Pon un break en el catch
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Concurrencia sobre dll externa
.NET (C#, VB.NET, ASP)
Lopardo 4 4,859 Último mensaje 27 Febrero 2011, 15:50 pm
por [D4N93R]
Concurrencia y bloqueos en aplicaciones
Bases de Datos
Hadess_inf 0 2,155 Último mensaje 2 Octubre 2013, 03:55 am
por Hadess_inf
Sockets y concurrencia, duda básica
Programación C/C++
mk7 5 2,674 Último mensaje 23 Mayo 2014, 20:48 pm
por eferion
Concurrencia en java
Java
josevc 2 2,301 Último mensaje 4 Enero 2016, 13:52 pm
por josevc
Problema de los átomos - Concurrencia
Programación General
amgarciac 1 1,968 Último mensaje 10 Marzo 2016, 21:26 pm
por Lekim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines