Qual o significado do conceito Thread-Safe na programação? Não entendi muito bem sobre essa palavra nova.
Qual o significado do conceito Thread-Safe na programação? Não entendi muito bem sobre essa palavra nova.
Olá Arthur, tudo bem?
Relaxa que mais para frente ela vai ficando cada vez mais "comum", principalmente nos cursos de Thread
Mas vou te dar uma introdução, ok?
Dentro do Java podemos ter uma programação paralela com essas chamadas Threads
, então as vezes teremos 2 métodos que estão "rodando" ao mesmo tempo, por exemplo:
adicionaProdutosNoEstoque(novosProdutos);
removeProdutoNoEstoque(produto);
Com as threads, ao invés de nosso código primeiro adicionar e depois remover, podemos fazer ambas ao mesmo tempo, como se cada uma fosse um processo, igual temos com o computador que podemos estar mexendo no Eclipse e ao mesmo tempo escutando uma música no Spotify
Ai a questão é:
Já que as duas estão trabalhando ao mesmo tempo, como garantir que iremos ter as informações corretas ? Então vamos supor que temos 15 produtos X no estoque, o que pode acontecer é:
removeProduto
pega a informação de que tem 15 elementos, e remove 1 tornando 14adicionaProduto
também pegou a informação que tem 15 elementos e está adicionando 10Então o nosso resultado final que era para ser um estoque com 24 produtos, na verdade terá 25, porque uma das threads
pegou uma informação antiga
Para evitar que processos paralelos trabalhem com informações erradas, existem algumas coisas dentro do próprio Java que nos auxilia, então por exemplo o Vector
não permite que dois códigos paralelos mexam ao mesmo tempo (por isso ele é Thread-safe), então se o removeProduto
está utilizando o Vector
o adicionaProduto
não será executado até que ele termine, ou vice-versa, de forma que garantimos que todas as informações estarão corretas :)
Existem outras ferramentas, como variáveis atômicas
, sincronismo de acesso
, maaaas ai já entramos mais afundo no curso
A grande questão então de Thread safe é sobre conseguir trabalhar sem que haja conflitos entre 2 ou mais processos executando ao mesmo tempo!
Conseguiu Compreender? Pode parecer um pouco abstrato no começo, mas com o passar do tempo vai fazendo mais sentido :)
Abraços e Bons Estudos =D
Cara, agora eu entendi bem melhor. Eu sei que o assunto é mais complexo que isso, mas o importante que eu conseguir ter uma ideia do que é. Obrigado pela ajuda!