Tag: concurrence

  • Concorrência em Java não é o problema. Falta de coordenação é.

    Concorrência em Java não é o problema. Falta de coordenação é.

    Concorrência é um daqueles conceitos que parecem simples na teoria, mas quebram sistemas inteiros na prática.

    Para deixar isso mais intuitivo, gosto de pensar em uma história simples.

    Imagine um prédio com uma sala que tem um quadro de avisos.

    Um professor te pede um favor:

    “Você pode entrar lá e escrever no quadro que minha aula será às 15h e o local?”

    A sala tem várias portas.
    Enquanto você entra para escrever o aviso, outras pessoas também entram:

    • algumas apenas leem o quadro,
    • outras rabiscam algo,
    • outras apagam informações.

    Você faz o que o professor pediu, sai tranquilo e avisa que está tudo certo.

    Mais tarde, você volta para conferir…
    e o aviso não está mais lá.
    Alguém entrou depois de você e alterou o quadro antes da hora.

    Ninguém fez isso “por mal”.
    O problema é que todo mundo podia entrar e mexer ao mesmo tempo, sem nenhuma coordenação.

    Essa é a essência da concorrência:
    várias pessoas (ou threads) acessando e modificando o mesmo recurso ao mesmo tempo, sem controle, gerando resultados imprevisíveis.


    E se houvesse alguém controlando a entrada?

    Agora imagine a mesma sala, mas com um detalhe importante:
    há um segurança em cada porta.

    A regra dele é simples:

    • para escrever no quadro, só entra uma pessoa por vez;
    • enquanto alguém está escrevendo, os outros esperam;
    • o aviso do professor fica lá até a hora certa.

    Você entra, escreve o aviso, sai.
    Até as 15h, que é a hora da aula e o aviso deixa de fazer sentido, as pessoas apenas leem.
    Quando chega o horário, outro aluno ou professor entra, apaga e escreve o aviso dele.

    Quando você volta para conferir, o quadro está exatamente como deveria estar.

    Essa coordenação simples muda tudo.


    Fazendo o paralelo com Java

    Em Java, o synchronized cumpre exatamente esse papel do segurança:

    • ele controla o acesso a um recurso compartilhado;
    • garante que apenas uma thread por vez execute um trecho crítico;
    • evita que o estado do sistema fique inconsistente.

    Ele não torna o sistema mais rápido — pelo contrário, ele faz as threads esperarem.
    Mas ele torna o sistema correto, previsível e confiável.


    Concluindo…

    Concorrência não é, por si só, o problema.
    O problema é concorrência sem coordenação.

    Sem regras, vira bagunça.
    Com um mínimo de controle, a informação passa a fazer sentido.

    E, muitas vezes, é exatamente isso que o synchronized está fazendo no seu código:
    não deixando todo mundo entrar na sala ao mesmo tempo.

    Concorrência não exige pressa. Exige coordenação.