Dúvida em thread

Ola …
Estou com pequeno problema com Threads…

Estou desenvolvendo uma aplicação web no qual um processo tem q ser executado todo, mas isso nao acontece … o que está acontecendo é o seguinte

O PROCESSO “A” INICIOU E EM SEGUIDA UM NOVO PROCESSO FOI GERADO (PROCESSO B)
PROCESSO “A” PÁRA PARA O PROCESSO “B” SER EXECUTADO .

Alguem sabe algo para solucionar esse problema de thread :smiley:
até o momento eu já fiz isso …

[code] public ThreadIniciarAudio(Usuario usuarioLoUsuario, String idAudio,String PRESTADOR){
System.out.println(“CONSTRutOR”);
this.usuarioLogado =usuarioLoUsuario;
this.idAudio = idAudio;
this.PRESTADOR = PRESTADOR;
setPriority(10);

}

public  void iniciar (){
	
	while (ocupada){
		try {
			System.out.println("OCUPADO .... Esperando um executor iniciar a thread ... ");
			wait();
			
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	ocupada = true;
	AtividadeService atividadeService = new AtividadeService();
	AudioService audioService = new AudioService();
	AudioHistoricoService audioHistoricoService = new AudioHistoricoService();

	try{
		AudioHistorico ultimoHistorico = new AudioHistorico();
		ultimoHistorico = audioHistoricoService.getUltimoHistoricoArquivo(new Integer(idAudio), PRESTADOR);
		boolean podeIniciar = true;
		if(ultimoHistorico.getAcao() != null && ultimoHistorico.getAcao().equals("2")){
			if(ultimoHistorico.getDataFim() == null){
				podeIniciar = false;
			}
		}
		if(podeIniciar){
			Atividade atividade = new Atividade();
			AudioGravado audioGravado = new AudioGravado();
			AudioHistorico audioHistorico = new AudioHistorico();
			audioGravado = audioService.getAudioGravadoPorId(new Integer(idAudio), PRESTADOR);
			atividade = atividadeService.buscaProximaAtividade(audioGravado,null,PRESTADOR);
			audioHistorico.setAtividade(atividade);
			audioHistorico.setUsuario(usuarioLogado);
			audioHistorico.setAcao("2");
			audioHistorico.setAudio(audioGravado);
			audioHistorico.setDataInicio(new Date());
			audioService.salvarAudioHistorico(audioHistorico, PRESTADOR);
			audioGravado.setAtividade(atividade);
			audioGravado.setStatus("21");
			audioService.salvarAudioGravado(audioGravado, PRESTADOR);
			
		}
		ocupada = false;
	}catch (StenoException e) {
		ocupada = false;
		e.printStackTrace();
		//informarErro(usuarioLogado, "AudioComumMB - iniciarAudio", ""+e.fillInStackTrace());
	}
}
public void run() {

	synchronized (this) {
		iniciar();
	}
	
}[/code]

vlw

Alessandra,

Por favor explique melhor o que seria parar o processo A para iniciar o processo B.

Se possivel postar como vc esta disparando as threads e as propriedades da Thread

Seria bom também descrever o comportamento desejado.

E outra coisa… quando for postar títulos de tópicos, desligue o CAPS LOCK.

Então eu quero que o processo B só inicie depois que o processo A termine de executar tudo o q tem q fazer …

A Thread é disparada nesse metodo

private void iniciarAudio(String idAudio) { ThreadIniciarAudio thread = new ThreadIniciarAudio(getUsuarioLogado(), idAudio, getPRESTADOR()); thread.start(); thread.stop(); }

Você teria que fazer algo como:

[code]//Inicia o processo A
processoA.start();
//Aguarda ele terminar
processoA.join();

//Inicia o processo B
processoB.start();
[/code]

Não use o método stop(). Ele cancela a execução de uma thread e, se você ler o javadoc dele, verá que lá existe um alerta gigante dizendo que o método não pode ser usado. Inclusive, seu IDE já deveria ter marcado ele como deprecated, e colocado um risco enorme sobre ele.

Vc pode tambem utilizar um threadpool (pool de threads).