Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double...

Post on 16-Mar-2021

1 views 0 download

Transcript of Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double...

Multithreading e JavaEE

QConSP '14

Gilliard Cordeiro, tomador de tereré

Ok, agora vamos ao que interessa…

Por que um sistema pode ficar lento?

E como vc pensa em resolver?

pense melhor

Pode ser bom… …pode ser Pepsi

Simples :)

pouca mudança no código e muita nos

resultados

com Multithreading

Contrato

- cliente - saldo

Parcela

- vencimento - valor

* parcelas

!! public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }!

import java.util.concurrent.Future; import javax.ejb.AsyncResult; ! @Asynchronous public Future<Double> reajustaContrato(Contrato contrato, double percent){! contrato.saldo *= (1 + percent); return new AsyncResult<Double>(contrato.saldo); }

! @Asynchronous public Future<Double> reajustaContrato(Contrato contrato, double percent){! contrato.saldo *= (1 + percent) return new AsyncResult<Double>(contrato.saldo); }!

@EJB ContratoBean contratoBean void reajustarTodasContratos(double percentual){ List<Contrato> contratos = em.createQuery(“select…”).getResultList(); for(Contrato contrato : contratos){ contratoBean.reajustarContrato(contrato, percentual); } }

0

10

20

30

40

Local Server

78

32

18

SYNC ASYNC

Mas eu queria abrir uma Thread…

@Resource private ManagedExecutorService executor; void reajustaContratos(){ executor.execute(new Calculadora(contrato, 0.1)); } //——————————————————————————————————————————————-! class Calculadora implements Runnable{ Contrato contrato; double percentual;! public void run() { contrato.reajuste(percentual); } }

@Resource private ManagedExecutorService executor; double reajustaContratos(){ Future<Double> reajusteFuture = executor .submit(new Calculadora(contrato, 0.1)); return reajusteFuture.get() } //——————————————————————————————————————————————-! class Calculadora implements Callable<Double>{ Contrato contrato; double percentual;! public Double call() { return contrato.reajuste(percentual); } }

DEMO

http://gilliard.eti.br

Duvidas?

gscordeiro@gmail.com