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

20
Multithreading e JavaEE QConSP '14

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

Page 1: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

Multithreading e JavaEE

QConSP '14

Page 2: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

Gilliard Cordeiro, tomador de tereré

Page 3: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;
Page 4: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

Ok, agora vamos ao que interessa…

Page 5: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

Por que um sistema pode ficar lento?

Page 6: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

E como vc pensa em resolver?

Page 7: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;
Page 8: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

pense melhor

Page 9: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

Pode ser bom… …pode ser Pepsi

Simples :)

Page 10: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

pouca mudança no código e muita nos

resultados

Page 11: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

com Multithreading

Page 12: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

Contrato

- cliente - saldo

Parcela

- vencimento - valor

* parcelas

Page 13: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

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

Page 14: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

! @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); } }

Page 15: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

0

10

20

30

40

Local Server

78

32

18

SYNC ASYNC

Page 16: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

Mas eu queria abrir uma Thread…

Page 17: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

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

Page 18: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

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

Page 19: Multithreading e JavaEE - qconsp.com · public Double reajustaContrato(Contrato contrato, double percent){ contrato.saldo *= (1 + percent); return contrato.saldo; }! import java.util.concurrent.Future;

DEMO