Cada chamada à classe ser uma nova Thread

3 respostas
Emersonsts

Boa noite,

Na minha aplicação tenho 2 camadas: visão e negócio. Quero que cada nova chamada a camada de negócio seja uma nova Thread.

Com um esboço de código fica mais fácil de explicar:
class Visao {
	
	public void queroExecutarCalculoA(int a) {
		
		Negocio n = new Negocio();
		
		Thread t = new Thread(n);
		t.start();
		
	}
	
	public void queroExecutarCalculoB(int a) {
		
		Negocio n = new Negocio();
		
		Thread t = new Thread();
		t.start();
		
	}
	
}

class Negocio implements Runnable {
	
	public int executarCalculo1(int a) {
		
		return a+1;
	}
	
	public double executarCalculo2(int a) {
		return a*a;
	}
	

	@Override
	public void run() {
		
	}
}
Nesse exemplo vamos supor que cada camada tem apenas uma classe.

Os dois métodos que preciso que sejam executados concorrentemente estão na mesma classe. Gostaria de saber como fazer a escolha de qual método executar já que o método run é único. Não queria ter que passar por parâmetro um int dizendo qual eu quero executar. Eu também não consegui achar uma maneira de conseguir o retorno dos métodos.

Sou iniciante no uso de Threads, sei executá-las, mas não conheço as boas práticas.

Abs,

3 Respostas

S

A pergunta de como fazer com o resultado é boa: vai esperar a Thread terminar para obter o resultado? Então não vejo vantagem em rodar numa Thread separada.

Você poderia usar um Future com um Executor - Future é parecido com o Runnable, mas tem retorno.

Talvez ajude saber o porque de querer rodas os métodos em outra Thread.

Emersonsts

Oi Samuel, obrigado pela respota.

Tenho um conjunto N de dados numéricos e desejo realizar alguns cálculos estatísticos sobre eles. Os cálculos utilizam os mesmos dados de entrada, não os alteram e me retornam um resultado. O resultado ser apresentado em forma de grafico ou textual.
Hoje ele executa todo o calculo A para depois ir para o calculo B, ou seja, o tempo de resposta é o tempo do calculo A mais o tempo do calculo B. Com o uso de Threads espero diminuir esse tempo de resposta.

Abs,

S

Emersonsts:
Oi Samuel, obrigado pela respota.

Tenho um conjunto N de dados numéricos e desejo realizar alguns cálculos estatísticos sobre eles. Os cálculos utilizam os mesmos dados de entrada, não os alteram e me retornam um resultado. O resultado ser apresentado em forma de grafico ou textual.
Hoje ele executa todo o calculo A para depois ir para o calculo B, ou seja, o tempo de resposta é o tempo do calculo A mais o tempo do calculo B. Com o uso de Threads espero diminuir esse tempo de resposta.

Abs,

Então penso que com dois Future (FutureTask, ForkJoinTask) e um Thread principal, que irá aguardar o termino dos dois anteriores deve resolver. Mas também as outras classes/interfaces do pacote java.util.concurrent podem ser interessantes para ajudar nesse problema.

Criado 11 de abril de 2013
Ultima resposta 13 de abr. de 2013
Respostas 3
Participantes 2