Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio: Lock e Condition | Mecanismos de Sincronização de Alto Nível
Multithreading em Java

bookDesafio: Lock e Condition

Descrição da Tarefa

Imagine que você está projetando um controlador de semáforo para um cruzamento movimentado. O sistema de semáforo consiste em três estágios: luz vermelha, luz amarela e luz verde. Esses estágios devem ser executados em uma ordem específica para garantir um fluxo de tráfego seguro e eficiente.

Sua tarefa é implementar os métodos: redLight(), yellowLight() e greenLight(). Esses métodos devem ser executados estritamente na ordem de um semáforo real: primeiro luz vermelha, depois luz amarela e, por fim, luz verde, independentemente da ordem em que as threads os chamam.

Requisitos:

  • Sincronização: Garantir que os métodos sejam executados em ordem estrita;
  • Multithreading: Os métodos podem ser chamados por diferentes threads, mas a execução deve ocorrer na ordem: redLight(), yellowLight() e greenLight();
  • Uso de Lock e Condition: Aplicar Lock para controlar o acesso aos recursos compartilhados e Condition para coordenar as threads.
Note
Nota

O campo counter na classe TaskLockExample foi especificado por um motivo, você precisará verificar seu valor em cada método e, dependendo do que estiver lá, decidir se deve iniciar essa thread ou não.

Você também precisa usar os campos lock e condition para bloquear alguma thread e decidir quem será o primeiro, segundo, terceiro.

Após implementar os métodos e acessar a classe Main e executar seu método main, você deverá obter uma saída independentemente da ordem e de qual thread executa qual método.

Além disso, imprima algo no console para verificar se os métodos estão sendo executados na ordem correta.

Note
Nota

Você também pode trocar o início das threads (não a implementação em si, mas onde o método start() da thread é chamado)

Depois de confirmar que tudo está funcionando, execute os testes de verificação no caminho /src/test/java/TaskLockExampleTest.java.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 3.33

bookDesafio: Lock e Condition

Deslize para mostrar o menu

Descrição da Tarefa

Imagine que você está projetando um controlador de semáforo para um cruzamento movimentado. O sistema de semáforo consiste em três estágios: luz vermelha, luz amarela e luz verde. Esses estágios devem ser executados em uma ordem específica para garantir um fluxo de tráfego seguro e eficiente.

Sua tarefa é implementar os métodos: redLight(), yellowLight() e greenLight(). Esses métodos devem ser executados estritamente na ordem de um semáforo real: primeiro luz vermelha, depois luz amarela e, por fim, luz verde, independentemente da ordem em que as threads os chamam.

Requisitos:

  • Sincronização: Garantir que os métodos sejam executados em ordem estrita;
  • Multithreading: Os métodos podem ser chamados por diferentes threads, mas a execução deve ocorrer na ordem: redLight(), yellowLight() e greenLight();
  • Uso de Lock e Condition: Aplicar Lock para controlar o acesso aos recursos compartilhados e Condition para coordenar as threads.
Note
Nota

O campo counter na classe TaskLockExample foi especificado por um motivo, você precisará verificar seu valor em cada método e, dependendo do que estiver lá, decidir se deve iniciar essa thread ou não.

Você também precisa usar os campos lock e condition para bloquear alguma thread e decidir quem será o primeiro, segundo, terceiro.

Após implementar os métodos e acessar a classe Main e executar seu método main, você deverá obter uma saída independentemente da ordem e de qual thread executa qual método.

Além disso, imprima algo no console para verificar se os métodos estão sendo executados na ordem correta.

Note
Nota

Você também pode trocar o início das threads (não a implementação em si, mas onde o método start() da thread é chamado)

Depois de confirmar que tudo está funcionando, execute os testes de verificação no caminho /src/test/java/TaskLockExampleTest.java.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 2
some-alt