Está ocorrendo bloqueio, certamente, mas ele só acontecerá quando várias threads usarem a mesma instância apontada por . Qualquer instância de objeto é válida para usar a construção synchronized( <instância> ) - ou seja, não há problema algum em usar parâmetros de métodos para esta tarefa. Se você usar synchronized na própria assinatura do método, usará uma política de bloqueio mais rígida, pois forçará que, em um dado momento, apenas uma thread poderá usar aquele método.
E
entanglement
seudito:
Olá pessoal.
Estou fazendo manutenção em uma aplicação onde aparentemente está havendo problemas de concorrência entre threads.
Esse tipo de programa aparentemente está com um bug de programação do tipo “não sei o que é synchronized, mas vou pôr um no código para ver se funciona”. E como o teste deve ter sido do tipo “funcionou uma vez está perfeito” então…
Essa é a primeira vez que eu vejo usar um synchronized sobre um parâmetro (o que normalmente não é algo comum) e ainda por cima do tipo String (como strings são imutáveis, seu acesso não precisa ser sincronizado).
O correto é verificar exatamente quais aa estrutura de dados cujo acesso deve ser sincronizado, e isso vai dar um monte de trabalho, pelo que imagino.
seudito
=/
como imaginei… afinal, cada thread pode e chama este método com parâmetros diferentes, logo, este bloqueio está totalmente furado :roll: