Programa que simula um processo de provas academicas em Java. Usando Multi-Threading
- Implementa a interface
Runnable
, representando o docente. - O docente aguarda até que todos os alunos peguem a prova (
provaPronta.countDown()
é chamado para cada aluno). - Quando todos os alunos pegaram a prova, o docente permite que os alunos iniciem as provas (
alunosTerminaram.await()
é chamado para esperar que todos terminem). - Imprime mensagens sobre a distribuição de provas.
- Implementa a interface
Runnable
, representando os alunos. - Os alunos aguardam até que a prova esteja pronta (
provaPronta.await()
). - Cada aluno inicia a sua prova, espera um tempo aleatório (simulando o tempo que cada aluno leva para terminar a prova) e, em seguida, registra no arquivo "folha_presenca.txt" que terminou a prova.
- Imprime mensagens indicando o início e o término da prova.
- Define o conjunto de alunos (
String[] nomesAlunos
) e inicializa trêsCountDownLatch
:provaPronta
: para sinalizar quando a prova está pronta para os alunos.alunosTerminaram
: para sinalizar quando todos os alunos terminaram a prova.alunosPegaramProva
: utilizado pelo docente para contabilizar quantos alunos pegaram a prova.
- Inicializa um
Thread
para oDocente
e um array deThreads
para osAlunos
. - Cada aluno é associado a uma
Thread
e começa a execução. - O docente é colocado em uma
Thread
separada e também é iniciado.
- O docente inicia a distribuição das provas.
- Cada aluno pega a prova após ela ser disponibilizada pelo docente.
- Quando todos os alunos pegaram a prova, o docente permite que iniciem a resolução.
- Cada aluno começa sua prova, simula um tempo aleatório para resolvê-la e registra o término no arquivo.
- Após todos terminarem, a execução é encerrada.
Esse código ilustra a sincronização de threads com CountDownLatch
para coordenar o início e o término de atividades em um ambiente multithreaded, simulando uma situação de sala de aula.