Técnico de Gestão Administrativa - Programador de Sistemas
Analise o código Java apresentado a seguir.public class Main extends Thread {public static void main(String[] args) {Main thread = new Main();thread.start();for (int k=1; k<=5; k++) {System.out.println("A" + k);try { Thread.sleep(1100); }catch (InterruptedException ex) {}}}public void run() {for (int k=1; k<=5; k++) {try { Thread.sleep(700);}catch (InterruptedException ex) {}System.out.println("B" + k);} } }Quando esse código é executado num computador com boa capacidade e sem interferência de processos externos, os valores exibidos, na ordem, são:
AA1 A2 A3 A4 A5 B1 B2 B3 B4 B5
BA1 B1 A2 B2 A3 B3 A4 B4 A5 B5
CA1 B1 A2 B2 B3 A3 B4 A4 B5 A5
DB1 A1 B2 A2 B3 A3 B4 A4 B5 A5
EB1 B2 B3 B4 B5 A1 A2 A3 A4 A5
Revelar gabarito e comentário▾
GabaritoC — A1 B1 A2 B2 B3 A3 B4 A4 B5 A5
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Java – Threads e Concorrência
Gabarito: letra C. A saída correta é A1 B1 A2 B2 B3 A3 B4 A4 B5 A5. O código cria uma nova thread (via start()) que executa o método run() concorrentemente com a thread principal. A diferença nos tempos de sleep e na posição do print dentro de cada loop determina a intercalação.
Simulação temporal
Em main(): o println ocorre antes do sleep(1100). Assim, o primeiro A1 é impresso imediatamente (t=0).
Em run(): o sleep(700) ocorre antes do println. Portanto, o primeiro B1 sai após 700ms.
A)A1 A2 A3 A4 A5 B1 B2 B3 B4 B5 – Só seria possível se a thread principal terminasse antes da secundária começar, mas elas iniciam quase juntas e A1 não espera.
B)A1 B1 A2 B2 A3 B3 A4 B4 A5 B5 – Alternância perfeita: ocorreria se os sleeps fossem iguais (ex.: 1000ms cada) e ambos imprimissem antes de dormir. Aqui o sleep da secundária é menor e causa o acúmulo de B's.
C) Correta, conforme demonstrado.
D)B1 A1 B2 A2 B3 A3 B4 A4 B5 A5 – A thread secundária imprimiria primeiro, mas ela dorme 700ms antes do primeiro print, enquanto a principal imprime imediatamente.
E)B1 B2 B3 B4 B5 A1 A2 A3 A4 A5 – A principal só imprimiria depois que a secundária terminasse, o que não acontece – a principal não espera a outra thread.
PEGA ESSA DICA!
Em questões de concorrência com sleep, simule mentalmente ou no papel a linha do tempo. Note a diferença crucial: sleep antes ou depois do println altera a ordem da primeira ocorrência. Além disso, tempos diferentes (700ms vs 1100ms) geram assimetria na intercalação.