2010-09-04 17 views
5

Voy a través de los Kathy Sierra SCJP 1.5 Capítulo 9 (hilos) y no se menciona como:Necesidad programa de ejemplo para lanzar InterruptedException

en cuenta que el método sleep() puede lanzar una InterruptedException comprobado (por lo general va saber si esto es una posibilidad, ya que otro hilo tiene que ver explícitamente la interrupción), por lo que debe reconocer la excepción con un mango o declarar

Sólo necesito un programa de ejemplo para saber cuando es h ¿Aparece (que puedo ejecutar en mi máquina)?

busqué en Google, pero no pude encontrar ningún código de ejemplo para probar esta funcionalidad ..

Gracias de antemano

+0

este artículo puede ser útil: [¿Qué hacer con InterruptedException?] (Http://www.yegor256.com/2015/10/20/interrupted-exception.html) – yegor256

Respuesta

19

He aquí un ejemplo:

public class Test 
{ 
    public static void main (String[] args) 
    { 
     final Thread mainThread = Thread.currentThread(); 

     Thread interruptingThread = new Thread(new Runnable() { 
      @Override public void run() { 
       // Let the main thread start to sleep 
       try { 
        Thread.sleep(500); 
       } catch (InterruptedException e) { 
        throw new RuntimeException(e); 
       } 
       mainThread.interrupt(); 
      } 
     }); 

     interruptingThread.start(); 

     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      System.out.println("I was interrupted!"); 
     } 
    } 
} 

a caminar a través de él:

  • Configure un nuevo hilo que durmirá durante un tiempo corto, luego interrumpa el hilo principal
  • Start que nuevo hilo
  • sueño durante un tiempo de duración ish (en el hilo principal)
  • impresión a cabo un método de diagnóstico cuando estamos interrumpidos (de nuevo, en el hilo principal)

La suspensión en el hilo principal no es estrictamente estrictamente necesario, pero significa que el hilo principal realmente comienza a dormir antes de que se interrumpa.

+1

Gracias jon por su pronta respuesta. Solo curiosidad por saber si hay alguna manera, a través de la cual podamos causar interruptedexception, que no sea el método de interrupción ?? – javanoob

+0

@javanoob: No es que yo sepa ... algún otro método puede llamar 'interrupt()' por supuesto, por lo que puede no ser evidente para su código que 'interrupt()' ha sido llamado, pero eso es básicamente cómo usted interrumpe el hilo –

-1
public class SleepTest1 extends Thread { 
@Override 
public void run() { 
    try { 
     for (int i = 0; i < 5; i++) { 
      System.out.println(Thread.currentThread().getName()); 
      Thread.sleep(1000); 
      Thread.currentThread().interrupt(); 
     } 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 
    SleepTest1 st1 = new SleepTest1(); 
    st1.start(); 
} 

}

+0

Las respuestas con solo código están mal vistas en Stack Overflow. ¿Podrías ampliar esta respuesta? –

+0

Este código no interrumpe el sueño, interrumpe después del sueño. No es exactamente lo que el OP está preguntando. –

Cuestiones relacionadas