Ir para conteúdo
Fórum Script Brasil
  • 0

Problema de Thread em Questão de Concurso - Como solucionar?


paulobergo

Pergunta

Prezados, bom dia!

Podem avaliar? a seguinte questão foi cobrada em uma prova de concurso:

QUESTÃO 48 – Dado o seguinte código-fonte Java (arquivo Main.java), assinale a alternativa que NÃO ilustra uma saída impressa válida para sua execução:

public class Main {                      classGerador extends Thread {
 public static void                       privateint time;
 main(String args[]) {                    publicGerador (String str, intdesloc) {
  Gerador g1, g2, g3, g4;                  super(str);
  g1 = new Gerador ("g1",0);               time = (int) ((Math.random() + desloc) * 1000.0);
  g2 = new Gerador ("g2",1);              }
  g3 = new Gerador ("g3",0);              public void run() {
  g4 = new Gerador ("g4",1);               try { Thread.sleep(time); }
  g1.start(); g2.start();                  catch (Exception e) { }
  g3.start(); g4.start();                  System.err.print(getName()+":"+time+" ");
 }                                        }
}                                        }

a) g1:909  g3:922   g2:1670  g4:1989
b) g3:92   g1:954   g4:1323  g2:1726
c) g1:842  g3:908   g2:1253  g4:1636
d) g3:334  g2:1266  g4:1595  g1:585
e) g1:157  g3:378   g4:1177  g2:1634
 

O programa não compila nem executa, criando-se simplesmente o arquivo Main.java, tanto desta forma:

public class Main {                      classGerador extends Thread {
 public static void                       privateint time;
 main(String args[]) {                    publicGerador (String str, intdesloc) {
  Gerador g1, g2, g3, g4;                  super(str);
  g1 = new Gerador ("g1",0);               time = (int) ((Math.random() + desloc) * 1000.0);
  g2 = new Gerador ("g2",1);              }
  g3 = new Gerador ("g3",0);              public void run() {
  g4 = new Gerador ("g4",1);               try { Thread.sleep(time); }
  g1.start(); g2.start();                  catch (Exception e) { }
  g3.start(); g4.start();                  System.err.print(getName()+":"+time+" ");
 }                                        }
}                                        }

como desta forma:

public class Main {
 public static void
 main(String args[]) {
  Gerador g1, g2, g3, g4;
  g1 = new Gerador ("g1",0);
  g2 = new Gerador ("g2",1);
  g3 = new Gerador ("g3",0);
  g4 = new Gerador ("g4",1);
  g1.start(); g2.start();
  g3.start(); g4.start();
 }
}

classGerador extends Thread {
 privateint time;
 publicGerador (String str, intdesloc) {
  super(str);
  time = (int) ((Math.random() + desloc) * 1000.0);
 }
 public void run() {
  try { Thread.sleep(time); }
  catch (Exception e) { }
  System.err.print(getName()+":"+time+" ");
 }
}

(o arquivo Main.java criado com vi em um Linux - Xubuntu 14.04).

- Consideram que a questão mereceria ser anulada por 'má-formação'?

- A letra (d) foi a resposta correta. Por que?

Obrigado por qualquer ajuda!

Abraços

PVictor

Editado por paulobergo
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá pessoal...

Bom... descobri que o único jeito de dar certo era mesmo criando dois arquivos, o Main.java e o Gerador.java.

Claro, o Gerador.java, para funcionar, precisa ser todo corrigido (Separando "Class" de "Gerador", "private" de "int", etc.... ficando tudo assim:

Main.java

public class Main {
 public static void
 main(String args[]) {
 Gerador g1, g2, g3, g4;
 g1 = new Gerador ("g1",0);
 g2 = new Gerador ("g2",1);
 g3 = new Gerador ("g3",0);
 g4 = new Gerador ("g4",1);
 g1.start(); g2.start();
 g3.start(); g4.start();
 }
}

Gerador.java

class Gerador extends Thread {
 private int time;
 public Gerador (String str, int desloc) {
 super(str);
 time = (int) ((Math.random() + desloc) * 1000.0);
 }
 public void run() {
 try { Thread.sleep(time); }
 catch (Exception e) { }
 System.err.print(getName()+":"+time+" ");
 }
}

Daí, é só compilar e testar:

bergo-P01157220:~/Documentos/Java$ javac Gerador.java
bergo-P01157220:~/Documentos/Java$ javac Main.java
bergo-P01157220:~/Documentos/Java$
bergo-P01157220:~/Documentos/Java$ java Main
g1:783 g3:868 g4:1425 g2:1754
bergo-P01157220:~/Documentos/Java$
bergo-P01157220:~/Documentos/Java$ java Main
g1:70 g3:226 g4:1419 g2:1889
bergo-P01157220:~/Documentos/Java$
bergo-P01157220:~/Documentos/Java$ java Main
g3:399 g1:817 g2:1004 g4:1802
bergo-P01157220:~/Documentos/Java$
bergo-P01157220:~/Documentos/Java$ java Main
g3:331 g1:674 g2:1521 g4:1811
bergo-P01157220:~/Documentos/Java$
bergo-P01157220:~/Documentos/Java$ java Main
g3:392 g1:872 g4:1565 g2:1869
bergo-P01157220:~/Documentos/Java$
bergo-P01157220:~/Documentos/Java$ java Main
g3:159 g1:710 g4:1378 g2:1907
bergo-P01157220:~/Documentos/Java$
bergo-P01157220:~/Documentos/Java$ java Main
g3:406 g1:843 g4:1094 g2:1128
bergo-P01157220:~/Documentos/Java$
bergo-P01157220:~/Documentos/Java$ java Main
g3:781 g1:840 g2:1333 g4:1824
bergo-P01157220:~/Documentos/Java$ 

Porém, ainda fica a dúvida...

Porque um dos valores da alternativa d) não teriam causado uma exceção?

Obrigado!

Bergo

Editado por paulobergo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...