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
.txtemsrc/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)