Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio: ConcurrentMap | Coleções Sincronizadas
Multithreading em Java

bookDesafio: ConcurrentMap

Tarefa:

Implementação de sistema multithreaded para contabilização de visitas ao site.

Descrição:

É necessário criar um programa para manter o controle do número de visitas a diferentes páginas do site. O programa deve funcionar corretamente em um ambiente multithreaded, onde várias threads podem aumentar simultaneamente os contadores de visitas para diferentes páginas.

Requisitos:

  • Utilizar ConcurrentHashMap para armazenar dados sobre as visitas às páginas;
  • Implementar um método que incremente o contador de visitas para uma determinada página. incrementVisit();
  • Implementar um método que retorne o contador de visitas atual para uma determinada página. getVisitCount();
  • Criar múltiplas threads que irão incrementar os contadores de visitas simultaneamente. (Isso está implementado na classe Main, é necessário analisar o funcionamento dela).

Dicas:

  • Utilize ConcurrentHashMap para armazenar dados onde a chave é a URL da página e o valor é o contador de visitas;
  • Utilize os métodos compute() ou merge() para atualizar os contadores atomicamente no ConcurrentHashMap.

É necessário completar os métodos na classe PageVisitCounterImpl e, em seguida, executar os testes na classe PageVisitCounterTest.

Após concluir a tarefa com sucesso, todos os testes devem passar.

Note
Nota

Depois de realizar tudo corretamente, é possível tentar editar a linha onde ConcurrentMap é declarado na classe PageVisitCounterImpl e observar o que acontece.

Ou seja, é necessário substituir esta linha aqui pela implementação de ConcurrentMap.

Main.java

Main.java

copy
1
private final ConcurrentMap<String, Integer> visitCounts = new ConcurrentHashMap<>();

Neste caso, com a implementação do tradicional Map

Main.java

Main.java

copy
1
private final Map<String, Integer> visitCounts = new HashMap<>();
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 6

Pergunte à IA

expand

Pergunte à IA

ChatGPT

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

Suggested prompts:

Can you show me the code for the PageVisitCounterImpl class?

What do the incrementVisit() and getVisitCount() methods currently look like?

Can you explain how the Main class is creating and running the threads?

Awesome!

Completion rate improved to 3.33

bookDesafio: ConcurrentMap

Deslize para mostrar o menu

Tarefa:

Implementação de sistema multithreaded para contabilização de visitas ao site.

Descrição:

É necessário criar um programa para manter o controle do número de visitas a diferentes páginas do site. O programa deve funcionar corretamente em um ambiente multithreaded, onde várias threads podem aumentar simultaneamente os contadores de visitas para diferentes páginas.

Requisitos:

  • Utilizar ConcurrentHashMap para armazenar dados sobre as visitas às páginas;
  • Implementar um método que incremente o contador de visitas para uma determinada página. incrementVisit();
  • Implementar um método que retorne o contador de visitas atual para uma determinada página. getVisitCount();
  • Criar múltiplas threads que irão incrementar os contadores de visitas simultaneamente. (Isso está implementado na classe Main, é necessário analisar o funcionamento dela).

Dicas:

  • Utilize ConcurrentHashMap para armazenar dados onde a chave é a URL da página e o valor é o contador de visitas;
  • Utilize os métodos compute() ou merge() para atualizar os contadores atomicamente no ConcurrentHashMap.

É necessário completar os métodos na classe PageVisitCounterImpl e, em seguida, executar os testes na classe PageVisitCounterTest.

Após concluir a tarefa com sucesso, todos os testes devem passar.

Note
Nota

Depois de realizar tudo corretamente, é possível tentar editar a linha onde ConcurrentMap é declarado na classe PageVisitCounterImpl e observar o que acontece.

Ou seja, é necessário substituir esta linha aqui pela implementação de ConcurrentMap.

Main.java

Main.java

copy
1
private final ConcurrentMap<String, Integer> visitCounts = new ConcurrentHashMap<>();

Neste caso, com a implementação do tradicional Map

Main.java

Main.java

copy
1
private final Map<String, Integer> visitCounts = new HashMap<>();
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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