Pool de thread é pra isso?

6 respostas
E

No sistema que estamos desenvolvendo, criamos uma thread pra rodar um processo que faz varias alterações no banco de dados(usando Hibernate), ele é demorado por isso criamos uma thread para que rode em paralelo e deixe o sistema funcionando para o usuario.

Varios usuários estão clicando ao mesmo tempo neste botão que executa(o Processo demorado) uma thread. Só que se eu não deixo o metodo como syncronized, os valores dos objetos se perdem, e as mensagem vão trocadas para os usuarios. Com o syncronized, funciona… pq só depois que ele termina de executar este processo ele começa a executar o outro. O problema é que é muito demorado, um ficar esperando o outro… então queria saber se alguem tem alguma sugestão para que eu consiguir rodal ao mesmo tempo sem sincronized, sem que os valores dos objetos se percam …
pool de thred é para isso ???

vlw

6 Respostas

rogelgarcia

pool de threads nao resolvem isso nao…

O que vc tem que analisar… é como um usuario está interferindo no outro… e fazer algo para nao ter esse impacto…

Depende de como tá montado seu algoritmo…

Nao existe uma solucao pronta pra isso… vai depender do seu programa…

E

hum entendi… então esse erro é falha no algoritmo mesmo!!! pq o código nao tem muito segredo… na verdade não são os objetos q estão com valores trocados, no meio da execução existem algumas variaveis da classe que recebem um determinado valor que é setado no objeto (objeto.setMessagem(variavelClasse)) … e como tem varias threads sendo executadas o valor desta variavel “variavelClasse” está sendo setado nos outros objetos que foram iniciados com as outras threads…e dependendo do que acontecer no codigo esta variavel não pode ser setada nos outros objetos…

vc sabe me expicar mais ou menos por cima… oq é pool de thread??

vlw cara

Marky.Vasconcelos

E por que demora o que o Hibernate faz?

Talvez voce esteja salvando muitos objetos e fazendo o commit a cada elemento, voce pode salvar tudo na session e fazer o commit depois.

E

isso no meio deste “processo” exstem varias alterações e inserções no banco de dados… o commit é feito ali mesmo…

eu acho q eu não posso dar commit depois pq existem determinados momentos que o algoritmo faz isso:

ex:

carro.setMensagem(variavel);

update(carro)

em outro lugar deste “processo” eu tenho que pegar o carro atualizado com um id
carro = carregaCarro(idCarro);
aquele objeto anterior ja foi usado em outra lugar… com valores diferentes… ta meio bagunçado o código aqui …

ninguem pensou que podia dar problema caso várias pessoas acessasem ao mesmo tempo!!

alguma idéia?

Marky.Vasconcelos

Hmm… se a mesma sessão é compartilhada um load de outra thread fara que o objeto do pool seja retornado. Então os dados serão sempre consistentes desde que voce os carregue-os do pool sempre que precisar usa-los.

E

hummm foi isso q eu imaginei… o problema é que não sei como o pool de threads funciona… não achei nenhum exemplo para implementar aqui…
na verdade não entendi direito ainda… pq usar um pool de threads… é só pra os objetos ficarem consistentes…?? ou é pra gerenciar a quantidades de threads no servidor …pra não estourar. ??

tem algum exemplo ai?

Criado 18 de março de 2010
Ultima resposta 19 de mar. de 2010
Respostas 6
Participantes 3