Alternativa D - Apenas II, III e IV
Análise Detalhada das Assertivas
Esta questão aborda conceitos fundamentais de Sistemas Operacionais e Programação Concurrente, especificamente focando no modelo de threads da linguagem Java. Para encontrar a resposta correta, precisamos distinguir entre Concorrência e Paralelismo, além de entender a estrutura interna de threads.
## Verificação das Assertivas
I. "A Multiprogramação é uma maneira de alcançar uma forma limitada de paralelismo, mesmo em um computador com apenas uma CPU."
- Status: Incorreta.
- Explicação: Esta é a "pegadinha" da questão. Tecnicamente, em um sistema com apenas uma CPU, não é possível realizar execução simultânea de processos ou threads. O que acontece é Concorrência (gerenciamento de múltiplas tarefas alternadamente). Paralelismo requer múltiplos núcleos ou processadores para execução física simultânea. Embora a multiprogramação crie a ilusão de simultaneidade, chamar isso de "paralelismo" é tecnicamente impreciso em provas de nível técnico. Além disso, se esta assertiva fosse verdadeira, não haveria uma opção correta nas alternativas (pois não existe a opção "I, II, III e IV").
II. "Mesmo em um computador com apenas uma CPU, diferentes threads de uma aplicação gráfica como exemplo podem parecer estar todas sendo executadas ao mesmo tempo."
- Status: Correta.
- Explicação: Descreve perfeitamente o conceito de Concorrência. O sistema operacional (ou a JVM) utiliza um mecanismo chamado Time Slicing (fatia de tempo) para alternar rapidamente entre as threads. Para o usuário, isso parece uma execução simultânea, especialmente em interfaces gráficas onde o renderizado da UI ocorre em paralelo com cálculos de fundo.
III. "Java threads são objetos que podem cooperar e comunicar-se entre si para compartilhar objetos em memória, a tela, ou outros tipos de recursos e periféricos."
- Status: Correta.
- Explicação: Em Java, threads são implementadas como objetos (
java.lang.Thread). Uma vantagem chave das threads (em comparação a processos independentes) é o compartilhamento de recursos. Todas as threads de um mesmo processo compartilham o Heap (memória global do objeto), permitindo comunicação fácil através de variáveis de classe e objetos compartilhados.
IV. "A troca entre as threads sendo executadas ocorre rapidamente porque cada thread possui sua própria pilha armazenada na memória da Máquina Virtual Java. A pilha de cada thread contém as variáveis locais e os frames dos métodos que a thread está executando atualmente."
- Status: Correta.
- Explicação: Esta é uma descrição técnica precisa da arquitetura de threads.
- Pilha Própria (Stack): Diferente dos processos, cada thread tem sua própria área de memória para execução (Stack).
- Conteúdo: A stack armazena o estado de execução local: variáveis primitivas locais, referências de objetos e frames de método.
- Performance: Como as threads já compartilham o espaço de dados (Heap), a troca de contexto é mais leve (menos overhead) do que trocar entre processos completos.
## Resumo Comparativo
| Conceito | Definição Chave | Aplicabilidade na Questão |
|---|
| Concorrência | Gerenciamento de múltiplas tarefas (alternância rápida). | Presente em CPU única (Assertiva II). |
| Paralelismo | Execução simultânea física (múltiplas CPUs). | Não presente em CPU única (Assertiva I é Falsa). |
| Threads | Unidades de execução leves dentro de um processo. | Compartilham Heap, têm Stack própria (Assertivas III e IV). |
Conclusão
As assertivas II, III e IV descrevem corretamente o funcionamento de threads em Java e a diferença entre concorrência e paralelismo. A assertiva I é incorreta ao utilizar o termo "paralelismo" para descrever execução em CPU única.
Portanto, a alternativa correta é a D.