A call process é só isso mesmo…
Quem chama é um JSP cujo o conteúdo é apenas o seguinte
<script>
<%
br.com.bla.process.CallProcess.call(request.getParameter("id"));
if ( request.getAttribute("msg") != null ){
%> alert("<%=request.getAttribute("msg")%>"); <%
}
out.print("window.location.href='/proc/index.jsp?folder=" + request.getParameter("folder") + "';");
%>
</script>
E a thread é bem longa… o metodo run verifica se o arquivo existe, cria um log pra ele, verifica mais uma série de coisas e bla bla bla… Não acho necessario colocar o metodo run aqui.
O que realmente importa no metodo run() é uma outra classe que ele usa para processar os dados do arquivo (essa classe não é uma thread e o metodo não é sincronizado)… Não acho necessário colocar essa classe também, o problema está no começo, realmente não consigo entender o que acontece com a aplicação para instanciar varias threads em um start só…
Abaixo está o log de um caso extremo, onde varias vezes foi chamado o call e as threads (não deveria aparecer mensagens repetidas):
—Calling: Iniciando Thread
—Calling: Iniciando Thread
—Calling: Iniciando Thread
—Calling: Iniciando Thread
—Calling: Iniciando Thread
—Calling: Iniciando Thread
—Calling: Iniciando Thread
—Calling: Thread executando
—Calling: Thread executando
—Calling: Thread executando
—Calling: Thread executando
—Calling: Thread executando
—Calling: Thread executando
—Calling: Thread executando
—Thread: Iniciando…
—Thread: Iniciando…
—Thread: Iniciando…
—Thread: Iniciando…
—Thread: Iniciando…
—Thread: Iniciando…
—Thread: Iniciando…
—Thread: Iniciando…
—Thread: arquivo: exec.txt
—Thread: arquivo: exec.txt
—Thread: arquivo: exec.txt
—Thread: arquivo: exec.txt
—Thread: arquivo: exec.txt
—Thread: arquivo: exec.txt
—Thread: arquivo: exec.txt
—Thread: arquivo: exec.txt
—Thread: tamanho: 749 bytes
—Thread: tamanho: 749 bytes
—Thread: tamanho: 749 bytes
—Thread: tamanho: 749 bytes
—Thread: tamanho: 749 bytes
—Thread: tamanho: 749 bytes
—Thread: tamanho: 749 bytes
—Thread: tamanho: 749 bytes
—Thread: Chamando processamento do arquivo para criação do arquivo de update e insert…
—Thread: Chamando processamento do arquivo para criação do arquivo de update e insert…
—Thread: Chamando processamento do arquivo para criação do arquivo de update e insert…
—Thread: Chamando processamento do arquivo para criação do arquivo de update e insert…
—Thread: Chamando processamento do arquivo para criação do arquivo de update e insert…
—Thread: Chamando processamento do arquivo para criação do arquivo de update e insert…
—Thread: Chamando processamento do arquivo para criação do arquivo de update e insert…
—Thread: Chamando processamento do arquivo para criação do arquivo de update e insert…
— Processamento: Iniciando…
— Processamento: Iniciando…
— Processamento: Iniciando…
— Processamento: Iniciando…
— Processamento: Iniciando…
— Processamento: Iniciando…
— Processamento: Iniciando…
— Processamento: Iniciando…
BuffRead: java.io.BufferedReader@128dff1
BuffRead: java.io.BufferedReader@128dff1
BuffRead: java.io.BufferedReader@128dff1
BuffRead: java.io.BufferedReader@128dff1
BuffRead: java.io.BufferedReader@128dff1
BuffRead: java.io.BufferedReader@128dff1
BuffRead: java.io.BufferedReader@128dff1
BuffRead: java.io.BufferedReader@128dff1
BuffPrintStream: java.io.PrintStream@86510a
BuffPrintStream: java.io.PrintStream@86510a
BuffPrintStream: java.io.PrintStream@86510a
BuffPrintStream: java.io.PrintStream@86510a
BuffPrintStream: java.io.PrintStream@86510a
BuffPrintStream: java.io.PrintStream@86510a
BuffPrintStream: java.io.PrintStream@86510a
BuffPrintStream: java.io.PrintStream@86510a
— Processamento: 1 updates gerados
— Processamento: 1 updates gerados
— Processamento: 1 updates gerados
— Processamento: 1 updates gerados
— Processamento: 1 updates gerados
— Processamento: 1 updates gerados
— Processamento: 1 updates gerados
— Processamento: 1 updates gerados
— Processamento: Nenhum insert foi gerado.
— Processamento: Nenhum insert foi gerado.
— Processamento: Nenhum insert foi gerado.
— Processamento: Nenhum insert foi gerado.
— Processamento: Nenhum insert foi gerado.
— Processamento: Nenhum insert foi gerado.
— Processamento: Nenhum insert foi gerado.
— Processamento: Nenhum insert foi gerado.
—Thread: Finalizou processo de criação do arquivo de insert e update…
—Thread: Finalizou processo de criação do arquivo de insert e update…
—Thread: Finalizou processo de criação do arquivo de insert e update…
—Thread: Finalizou processo de criação do arquivo de insert e update…
—Thread: Finalizou processo de criação do arquivo de insert e update…
—Thread: Finalizou processo de criação do arquivo de insert e update…
—Thread: Finalizou processo de criação do arquivo de insert e update…
—Thread: Finalizou processo de criação do arquivo de insert e update…
—Thread: chamando atualização de BD…
—Thread: chamando atualização de BD…
—Thread: chamando atualização de BD…
—Thread: chamando atualização de BD…
—Thread: chamando atualização de BD…
—Thread: chamando atualização de BD…
—Thread: chamando atualização de BD…
—Thread: chamando atualização de BD…
— Atualizando BD, iniciando
— Atualizando BD, iniciando
— Atualizando BD, iniciando
— Atualizando BD, iniciando
— Atualizando BD, iniciando
— Atualizando BD, iniciando
— Atualizando BD, iniciando
— Atualizando BD, iniciando
— Atualizando BD, saída: Executado sem problemas
— Atualizando BD, saída: Executado sem problemas
— Atualizando BD, saída: Executado sem problemas
— Atualizando BD, saída: Executado sem problemas
— Atualizando BD, saída: Executado sem problemas
— Atualizando BD, saída: Executado sem problemas
— Atualizando BD, saída: Executado sem problemas
— Atualizando BD, saída: Executado sem problemas
—Thread: finalizando…
—Thread: finalizando…
—Thread: finalizando…
—Thread: finalizando…
—Thread: finalizando…
—Thread: finalizando…
—Thread: finalizando…
—Thread: finalizando…
—Thread: arquivo (transferido): exec.txt
—Thread: arquivo (transferido): exec.txt
—Thread: arquivo (transferido): exec.txt
—Thread: arquivo (transferido): exec.txt
—Thread: arquivo (transferido): exec.txt
—Thread: arquivo (transferido): exec.txt
—Thread: arquivo (transferido): exec.txt
—Thread: arquivo (transferido): exec.txt
—Thread: tamanho (transferido): 749 bytes
—Thread: tamanho (transferido): 749 bytes
—Thread: tamanho (transferido): 749 bytes
—Thread: tamanho (transferido): 749 bytes
—Thread: tamanho (transferido): 749 bytes
—Thread: tamanho (transferido): 749 bytes
—Thread: tamanho (transferido): 749 bytes
—Thread: tamanho (transferido): 749 bytes
—Thread: Processamento finalizado.
—Thread: Processamento finalizado.
—Thread: Processamento finalizado.
—Thread: Processamento finalizado.
—Thread: Processamento finalizado.
—Thread: Processamento finalizado.
—Thread: Processamento finalizado.
—Thread: Processamento finalizado.