3
respostas

Concorrencia de Thread com outros processos

Estou com o seguinte problema entre uma Thread e outro processo. Tenho uma rotina em meu sistema que é executada por uma thread com o objetivo de validar alguns clientes com status liberado. Logo no inicio dessa rotina invoco um método que me retorna a lista desses clientes, e nesse cliente tem um campo XPTO que tem o valor nulo, mas que é preenchido com um determinado valor ao receber uma mensagem de um outro sistema. Por vezes esse valor XPTO fica nulo mesmo tendo processado a mensagem desse outro sistema. Avaliei o log de transações e percebi que entre o inicio e fim da Thread essa mensagem foi recebida, ou seja, esse cliente já estava em memória, com esse campo XPTO nulo e foi sobrescrito o valor enviado pela mensagem. Posso corrigir esse problema com algum serviço de uma Thread?

3 respostas

Oi Luis, não parece que a Thread tem algo a ver com seu problema... Parece algum erro do seu código mesmo.. Agora só com a descrição fica complicado de dar algum palpite... Eu tentaria logar o valor do campo o tempo todo, para ver em qual momento ele passou de ter valor para nulo.

Alberto obrigado pelo retorno eu já consegui simular o erro. realmente o problema ocorre quando um desses clientes vem na mensagem desse outro sistema para atualizar esse campo. Como a thread tem uma lista de clientes e demora mais tempo para encerrar sua rotina e esse cliente da mensagem encerra primeiro essa alteração é sobrescrita. Já pensei em colocar um sincronized na classe toda ,mas essa rotina é muito pesada a da thread. Desde que foi implementada essa rotina foi a primeira vez que ocorreu essa coincidência de ter nessa lista um cliente que veio nessa mensagem desse sistema externo. estou tentando implementar uma solução que verifique se esse campo do objeto que está na lista está diferente de nulo no banco e se estiver seto no objeto para que eu não perca esse valor. Você teria outra sugestão?

Para mim ainda não está claro o problema, foi mal :(. De todo jeito, tenta fazer a verificação que vc comentou. Vamos torcer para resolver :).

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software