Recuperando o valor de uma variável dentro de uma Thread

4 respostas
U

Tenho uma Thread que implementa um contador simples…
Chamo essa Thread a partir de uma classe Main…
Através de outra classe Main retorno o valor do cont atual dentro da Thread…
É possível?

public class TesteThread extends Thread {
	
	private Integer cont = 0;
	
	public Integer getCont() {
		return this.cont;
	}
	
	public void run() {
		while(true) {
			cont++;
			System.out.println(cont);
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
public class TesteThreadMain {
	
	private static TesteThread thread =  new TesteThread();
	
	public static TesteThread getTesteThread() {
		return thread;
	}

	public static void main(String[] args) {
		thread.start();
		System.out.println("t1 id: "+thread.getId());
		System.out.println("t1 nome: "+thread.getName());
	}
}
public class TesteThreadMain2 {

	public static void main(String[] args) {
		TesteThread t = TesteThreadMain.getTesteThread();
		System.out.println("t id: "+t.getId());
		System.out.println("t nome: "+t.getName());
		System.out.println("cont: "+t.getCont());
	}

}

Quando eu rodo o Main2 o interessante que ele retorna o ID e Nome corresponde à thread, exceto o valor do cont…

4 Respostas

E

Olá!

Na sua TesteThreadMain2 vc não está chamando o método start().
Se vc não chamar esse método, a sua Thread não irá executar.

Até mais

R

Ola, não sei se entendi mto bm oque deseja fazer, mas poderias usar variaveis globais ou metodos, onde então as threads teriam acesso.

U

Tentar resumir o melhor possível o meu problema:
Estou trabalhando em projeto web que utiliza spring e struts 1, onde eu devo desenvolver uma funcionalidade para gerar débitos baseados em registros no banco.
Cada registro gera 4 débitos, e são muitos registros por determinado período.
Bom, minha idéia: ao usuário solicitar a geração dos débitos, iniciar uma thread para processar essa tarefa, e, enquant isso, retornar ao usuário uma tela de aguarde mostrando alguma informação da progressão do processo.

A sequência seria mais ou menos:

  1. Usuário clica no botão gerar
  2. Action chama o comando
  3. Comando inicia a thread
  4. Usuário é direcionado à uma tela que mostra a progressão do processo

Existe como eu recuperar um valor dentro dessa Thread a partir de outro comando?

Obs: O código anterior não tem nada haver com o que estou fazendo no projeto, obviamente, é apenas um teste tentando simular o problema…

U

Teria como, no request, eu mandar um objeto Runnable para o jsp e então de lá pegar a informação que eu quero, enquanto a Thread está sendo executada?

Criado 25 de julho de 2011
Ultima resposta 28 de jul. de 2011
Respostas 4
Participantes 3