Dúvida em thread

5 respostas
A

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 :D até o momento eu já fiz isso ...
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();
		}
		
	}

vlw

5 Respostas

R

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

ViniGodoy

Seria bom também descrever o comportamento desejado.

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

A

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(); }

ViniGodoy

Você teria que fazer algo como:

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

//Inicia o processo B
processoB.start();

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.

R

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

Criado 26 de maio de 2011
Ultima resposta 26 de mai. de 2011
Respostas 5
Participantes 3