Este projeto demonstra duas abordagens distintas para o processamento de arquivos de texto em Java, com foco em paralelismo e desempenho. Ideal para aplicações que precisam lidar com grandes volumes de dados, o projeto mostra como dividir o trabalho entre múltiplas threads de forma eficiente.
Explorar duas formas de processar arquivos linha a linha em Java:
- Abordagem Tradicional: leitura completa do arquivo na memória.
- Abordagem Sob Demanda (Streaming): leitura em fluxo com processamento paralelo usando fila (
BlockingQueue
).
src/
├── Main.java
├── ProcessFile.java # Implementação da abordagem tradicional
└── StreamParallelProcessor.java # Implementação com leitura sob demanda
- Lê o arquivo inteiro para a memória.
- Divide as linhas em blocos para múltiplas threads.
- Cada thread processa suas linhas (conta palavras, por exemplo).
- Ao final, exibe os resultados por thread e o total processado.
✅ Arquivos pequenos/médios
✅ Processamento simples e rápido
❌ Pode estourar a memória com arquivos grandes
Número ideal de threads: 8
Total de linhas a serem processadas: 14344391
Tempo total de execução: PT2.066665223S
- O arquivo é lido linha a linha, em tempo real (streaming).
- Um "produtor" agrupa as linhas em lotes e envia para uma
BlockingQueue
. - Múltiplas threads "consumidoras" processam esses lotes em paralelo.
- Um sinal especial (
Poison Pill
) encerra as threads no final.
✅ Arquivos grandes
✅ Leitura eficiente com baixo uso de memória
✅ Processamento contínuo e paralelizado
Iniciando processamento paralelo do arquivo: src/main/resources/rockyou.txt com 8 threads.
Processamento finalizado com sucesso! Total de linhas processadas: 14344391
Tempo total de execução: PT1.046596379S
-
Certifique-se de ter Java 21+ e Gradle instalados.
-
Baixe o arquivo rockyou.txt
-
Coloque o arquivo
.txt
emsrc/main/resources/rockyou.txt
. -
Execute para obter os resultados:
./gradlew run
Característica | Tradicional | Streaming com Fila (Prod/Cons) |
---|---|---|
Carregamento do Arquivo | Todo na memória | Linha a linha |
Uso de Memória | Alto | Baixo |
Complexidade de Implementação | Baixa | Alta |
Performance em Arquivos Pequenos | Muito boa | Boa |
Performance em Arquivos Grandes | Ruim | Muito boa |
Modelo de Execução | ExecutorService + Future |
BlockingQueue + consumidores |
- Java 21 ou superior
- Gradle
- Terminal compatível (Linux/macOS/Windows com bash ou PowerShell)