SóProvas


ID
748069
Banca
CESGRANRIO
Órgão
Petrobras
Ano
2012
Provas
Disciplina
Programação
Assuntos

    Sejam as seguintes classes Java:

public class Xpto implements Runnable {
        public void run()
        {
                    try {
                            Thread.currentThread().join(0);
                              System.out.println(10);
                    }
                    catch(SecurityException e) {
                              System.out.println(20);
                    }
                    catch(IllegalMonitorStateException e) {
                             System.out.println(30);
                  }
                  catch(IllegalArgumentException e) {
                            System.out.println(40);
                  }
                  catch(Exception e) {
                            System.out.println(50);
                  }
          }
}
public class Q04 {
            public static void main(String[] args) {
                      Thread t=new Thread(new Xpto());
                      t.start();
                      t.interrupt();
            }
}

O que será exibido no console após a execução do comando t.interrupt()?    

Alternativas
Comentários
  • Alguém sabe explicar essa questão?
  • Sei que não é correto o uso de join em currentThread pois não se pode esperar terminar a propria thread que esta sendo executada atualmente e no caso gera uma exceção. Mas gostaria de maiores esclarecimentos também... se alguém puder ajudar eu agradeceria. abs ! 
  • Como foi feito o join da thread corrente, esta thread fica bloqueada. Então ao chamar t.interrupt será lançada uma InterruptedException. 
    Como não foi definido um catch para esta exception ela será tratada no catch da exption (genérica).

    http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#interrupt()
  • public final void join() throws InterruptedException
    Waits for this thread to die.
    An invocation of this method behaves in exactly the same way as the invocation

    join(0)

    Gera:

    InterruptedException - if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown. Como no comentário anterior, com a exception InterruptedException noi foi implementada então será chamado o tratamento genérico.