Senhores(a), boa noite.
Estou fazendo uma pequena aplicação cujo objetivo é ler de um arquivo alguns dados e alimentar uma lista usando threads.
Para tanto, coloquei o arquivo file para ser a região crítica.
[code]
public void readWrite(String nome, int quantLeitura) {
synchronized (file) { } [/code]
O problema é quando executo o menu principal:
do {
System.out.println("1.IMPORTAR ARQUIVO 2.CADASTRAR ALUNOS 3.SAIR");
opcao = ler.nextInt();
if (opcao == 1) {
a = new Guiche("JOÃO ");
b = new Guiche("PEDRO ");
c = new Guiche("THIAGO ");
a.start();
b.start();
c.start();
}
if (opcao == 2) {
// em desenvolvimento
}
} while (opcao != 3);
Ele executa as threads e não volta a exibir o menu,pois ele mostra novamente antes de executar as threads.
Ex:
Na primeira execução ele exibe:
1.IMPORTAR ARQUIVO 2.CADASTRAR ALUNOS
Depois escolho a opção 1 e veja o que acontece:
1.IMPORTAR ARQUIVO 2.CADASTRAR ALUNOS //exibe novamente o menu (deveria ser no final da execução das threads)
JOÃO está em processo de leitura ..........
JOÃO leu MARCOS
JOÃO agora está em processo de escrita..........
JOÃO gravou MARCOS na lista
*****************************************************
JOÃO está em processo de leitura ..........
JOÃO leu JOAO
JOÃO agora está em processo de escrita..........
JOÃO gravou JOAO na lista
*****************************************************
JOÃO está em processo de leitura ..........
JOÃO leu CARLOS
JOÃO agora está em processo de escrita..........
JOÃO gravou CARLOS na lista
*****************************************************
THIAGO está em processo de leitura ..........
THIAGO leu JOAQUIM
THIAGO agora está em processo de escrita..........
THIAGO gravou JOAQUIM na lista
*****************************************************
THIAGO está em processo de leitura ..........
THIAGO leu MARIA
THIAGO agora está em processo de escrita..........
THIAGO gravou MARIA na lista
*****************************************************
THIAGO está em processo de leitura ..........
THIAGO leu OLGA
THIAGO agora está em processo de escrita..........
THIAGO gravou OLGA na lista
*****************************************************
PEDRO está em processo de leitura ..........
PEDRO leu caLEBE
PEDRO agora está em processo de escrita..........
PEDRO gravou caLEBE na lista
*****************************************************
PEDRO está em processo de leitura ..........
PEDRO identificou que todos dados foram lidos
// fim da execução das threads.(O menu deveria ser impresso aqui).O sistema fica aguardando uma entrada.Se eu digito 1, ele executa novamente as threads
Minha dúvida é :
Existe alguma forma de contornar esse problema?
A única forma que imaginei seria ir no local onde as threads estão sendo executadas e ao fim(linha trinta e oito) chamar a classe principal para exibir novamente o menu,mas não seria uma forma elegante.
Por exemplo:
PEDRO está em processo de leitura ..........
PEDRO identificou que todos dados foram lidos
String args[]=null;
Principal.main(args);
Desde já, agradeço aos que puderem me ajudar.
Bom início de semana a todos!