Sincronização de metodos

Pessoal, boa tarde.

Dou manutenção em um sistema Web e me deparei com o seguinte problema.
Tem alguns métodos que são chamados em varias partes do sistema, e pode ter vários usuários fazendo a suas atividades no sistema e este por sua vez busca informações em banco, faz cálculos, muda status dos registros e assim por diante, isso causava erros pois uma rotina não havia sido finalizada e outra já era iniciada, e por aí vai, fizemos uma sincronização desses métodos comuns, mas tivemos uma lentidão no sistema (era esperado isso). Acredito que outros já tenham passado por esse problema. Como resolver? É somente sincronizando os métodos mesmo?

Aguardo dicas.
Obrigado.

Se voce sincrtonizar um metodo, o acesso vai ser sincronizado, não ha o que fazer, vai perder performance

mas talvez nao seja necessario deixar os metodos sincronizados analise os erros que acontecem.

boa sorte

A sincronização possui um custo como você citou, porém dependendo da transação poderia isolar apenas o que é fundamental em sincronizar, por exemplo o saldo de uma conta, em casos extremos de desempenho, esse campo pode ser tratado como uma tabela a parte, e tratado numa transação que garanta apenas a atualização dele em ambiente sincronizado, garantido velocidade maior do que um método com vários outros elementos envolvidos, mas independentes de sincronização.

Tem uma tonelada de material pra vc aqui: http://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html :O)
Vale a pena ler.