Desafio: Executores
Tarefa
Imagine que você possui uma lista de arquivos, cada um contendo linhas de texto. Sua tarefa é ler as linhas desses arquivos em paralelo e contar o número de palavras em cada linha. Utilize ExecutorService, Future e um pool de threads para realizar a tarefa.
Requisitos:
-
Criar um pool de threads: Crie um pool de threads de tamanho fixo utilizando
Executors.newFixedThreadPool(int nThreads), ondenThreadsé o número de threads no pool; -
Implementação da Tarefa: Implemente uma classe
WordCountTaskque implemente a interfaceCallable<String>e receba um arquivo como entrada. No método call dessa classe, leia as linhas do arquivo, conte o número de palavras em cada linha e retorne o resultado; -
Uso do
ExecutorService: Utilizando oExecutorService, envie tarefas para o pool de threads para execução. As tarefas devem utilizar a classeWordCountTask.
Além disso, a string que você formar em uma thread separada deve ser retornada e utilizada pelo método get() da interface Future para obter o resultado da execução da thread e exibir no console no método main.
Leitura de arquivo
Para implementar o método call(), utilize BufferedReader para ler strings de arquivos. Empregue um bloco try-with-resources para que os recursos sejam automaticamente fechados.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Utilize o método readLine() para ler cada linha e certifique-se de verificar se o valor é null para determinar quando o final do arquivo foi alcançado.
Em seguida, divida a string em um array de strings utilizando o método split("\\s+") com o padrão \\s+, que separa a string por espaços, e então obtenha o tamanho do array.
Na própria string, que o stream retorna, utilize esta formatação
Main.java
1String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Os arquivos já estão no projeto, não é necessário criá-los ou modificá-los!
Exemplo de saída
File: file1.txt | Line: Hello | Word Count: 1
File: file2.txt | Line: Hello I Love Java | Word Count: 4
File: file2.txt | Line: Lol Hello | Word Count: 2
File: file3.txt | Line: Java so so so so very nice | Word Count: 7
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 3.33
Desafio: Executores
Deslize para mostrar o menu
Tarefa
Imagine que você possui uma lista de arquivos, cada um contendo linhas de texto. Sua tarefa é ler as linhas desses arquivos em paralelo e contar o número de palavras em cada linha. Utilize ExecutorService, Future e um pool de threads para realizar a tarefa.
Requisitos:
-
Criar um pool de threads: Crie um pool de threads de tamanho fixo utilizando
Executors.newFixedThreadPool(int nThreads), ondenThreadsé o número de threads no pool; -
Implementação da Tarefa: Implemente uma classe
WordCountTaskque implemente a interfaceCallable<String>e receba um arquivo como entrada. No método call dessa classe, leia as linhas do arquivo, conte o número de palavras em cada linha e retorne o resultado; -
Uso do
ExecutorService: Utilizando oExecutorService, envie tarefas para o pool de threads para execução. As tarefas devem utilizar a classeWordCountTask.
Além disso, a string que você formar em uma thread separada deve ser retornada e utilizada pelo método get() da interface Future para obter o resultado da execução da thread e exibir no console no método main.
Leitura de arquivo
Para implementar o método call(), utilize BufferedReader para ler strings de arquivos. Empregue um bloco try-with-resources para que os recursos sejam automaticamente fechados.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Utilize o método readLine() para ler cada linha e certifique-se de verificar se o valor é null para determinar quando o final do arquivo foi alcançado.
Em seguida, divida a string em um array de strings utilizando o método split("\\s+") com o padrão \\s+, que separa a string por espaços, e então obtenha o tamanho do array.
Na própria string, que o stream retorna, utilize esta formatação
Main.java
1String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Os arquivos já estão no projeto, não é necessário criá-los ou modificá-los!
Exemplo de saída
File: file1.txt | Line: Hello | Word Count: 1
File: file2.txt | Line: Hello I Love Java | Word Count: 4
File: file2.txt | Line: Lol Hello | Word Count: 2
File: file3.txt | Line: Java so so so so very nice | Word Count: 7
Obrigado pelo seu feedback!