Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Duvida ao aplicar 10 threads em um set

Como fazer para que 10 threads trabalhem em paralelo pegando elementos diferentes de um set e processando-os. Exemplo a Thread 1 pega o elemento 1 do set, a Thread 2 o elemento 2, ... assim que uma terminar pega o próximo elemento do Set.

5 respostas

Boa noite, Carlos! Como vai?

A ideia é que vc terá que sincronizar o acesso ao seu Set, mais especificamente ao contador que indica qual a próxima posição a ser acessada!

Mas, como a ideia é não recriar a roda, te indico dar uma olhada em toda a aula 4 do curso de Threads em Java aqui da Alura que trata justamente sobre esse assunto!

Vc vai pegar a ideia do que precisa ser feito! Daí se te restar alguma dúvida vc pode lançar a dúvida específica aqui no fórum!

Grande abraço e bons estudos!

Mas problema é que assim estou criando o numero de Threads que meu set inicial tiver de elementos. Não consegui pensar em uma maneira que a Thread receba um novo elemento para processar quando acabar um elemento.

solução!

Ora, mas o que a aula do link que te passei mostra é exatamente isso! No entanto, em vez de pegar algo as threads colocam algo na lista. O processo inverso é semelhante ao visto em aula!

Será algo do tipo:

public class Monitor {
     private List<String> lista = // Cria uma lista de forma thread-safe como visto durante a aula 4 a partir do seu Set. Como vc sempre vai querer pegar o próximo item da lista, é melhor trabalhar com uma List em vez de um Set.

     public String pegaProximoItem() {
          synchronized(this) {
               if (posicao < lista.size()) {
                    String item = lista.get(posicao);
                    posicao++;

                    return item;
               }

               throw new RuntimeException("Não há mais itens a serem processados!");
          }
     }
}

Todas as suas threads consumirão a sua lista a partir de uma instância da classe Monitor, que vai gerenciar o acesso à sua lista e, por isso, implementa o importante conceito de monitor dentro da área de concorrência.

Pegou a ideia?

Sim. Obrigado. Acabei indo por um lado que ficou bem maior mas em uma próxima atualização ja vou testar dessa forma.

Blz, Carlos! Sempre que tiver qualquer dúvida é só mandar pro pessoal aqui no fórum!

Grande abraço e bons estudos!