Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 14222|Resposta: 0

[Comunicação] Insights sobre os tipos básicos de segurança de threads Java e I++

[Copiar link]
Publicado em 05/04/2015 22:17:45 | | |

Em Java, as outras variáveis básicas são atômicas, exceto as variáveis de 8 bytes e 64 bits de Long e Double.


O modelo de armazenamento Java exige que tanto as operações get quanto as de store sejam atômicas, mas para variáveis longas e duplas não voláteis, a JVM permite dividir uma leitura ou escrita de 64 bits em duas operações de 32 bits.

Se a leitura e a escrita ocorrerem em threads diferentes, ler um tipo não volátil longo pode resultar em 32 bits altos de um valor e 32 bits baixos do outro.

Então, mesmo que você não se importe com dados expirados, pode não ser seguro usar variáveis longas e duplas compartilhadas, mutáveis em um programa multithread, a menos que sejam declaradas voláteis ou protegidas com um bloqueio.


Falando em operações atômicas, significa que leitura e escrita são atômicas, como i=5; Esta é uma operação atômica.

No entanto, se a operação de dois átomos for realizada em conjunto, não é necessariamente atômica, como ler primeiro e depois escrever, então é possível que a variável tenha sido modificada após a leitura.

i++ é uma dessas operações, ler primeiro e depois escrever, então a variável inteira é atômica, não que i++ seja uma operação atômica.

Quando você usa for(int i=0; i<10000; i++){System.out.print(i)}

Você vai perceber que eu não imprimo 10.000 no final, e imprimo cerca de 8-9 mil.


Mas no caso do multi-threading, mesmo que a variável inteira seja atômica, pode haver problemas de segurança de thread, que é um problema de visibilidade de threads, então você precisa adicionar uma instrução volátil.

Esse modificador é uma variável forçada que é lida da memória a cada vez e não é armazenada em registradores.




Anterior:SQL 2008 apresenta uma mensagem de erro (provedor: SQL Network Interfaces, erro: 25 - Palavra de conexão).
Próximo:[Velozes e Furiosos 7] lança DVD 2.12G A versão mais clara da Internet
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com