Alguém pode explicar o que os modificadores transiente volatilesignificam em Java?
Alguém pode explicar o que os modificadores transiente volatilesignificam em Java?
Respostas:
Os modificadores volatilee transientpodem ser aplicados aos campos das classes 1, independentemente do tipo de campo. Além disso, eles não têm relação.
O transientmodificador diz ao subsistema de serialização de objetos Java para excluir o campo ao serializar uma instância da classe. Quando o objeto é desserializado, o campo será inicializado com o valor padrão; ou seja, nullpara um tipo de referência e zero ou falsepara um tipo primitivo. Observe que o JLS (consulte 8.3.1.3 ) não diz o que transientsignifica, mas adia para a Especificação de serialização de objetos Java . Outros mecanismos de serialização podem prestar atenção à transientintegridade de um campo . Ou eles podem ignorá-lo.
(Observe que o JLS permite que um staticcampo seja declarado como transient. Essa combinação não faz sentido para serialização de objetos Java, pois não serializa estática de qualquer maneira. No entanto, pode fazer sentido em outros contextos, portanto, há alguma justificativa para proibindo-o de imediato.)
O volatilemodificador informa à JVM que as gravações no campo devem sempre ser sincronizadas na memória e que as leituras do campo devem sempre ser lidas na memória. Isso significa que os campos marcados como voláteis podem ser acessados e atualizados com segurança em um aplicativo multithread sem usar a sincronização nativa ou padrão baseada em biblioteca. Da mesma forma, leituras e gravações em campos voláteis são atômicas. (Isso não se aplica a >> campos não voláteis << longou doubleque podem estar sujeitos a "rasgar palavras" em algumas JVMs.) As partes relevantes do JLS são 8.3.1.4 , 17.4 e 17.7 .
1 - Mas não para variáveis ou parâmetros locais.
volatilee transientpalavras - chave
1) transientpalavra-chave é usada junto com variáveis de instância para excluí-las do processo de serialização. Se um campo for transientseu valor, não será persistido.
Por outro lado, a volatilepalavra-chave é usada para marcar uma variável Java como "sendo armazenada na memória principal".
Toda leitura de uma volatilevariável será lida na memória principal do computador, e não no cache da CPU, e todas as gravações em uma volatilevariável serão gravadas na memória principal, e não apenas no cache da CPU.
2) transientpalavra-chave não pode ser usada junto com a staticpalavra - chave, mas volatilepode ser usada junto com static.
3) as transientvariáveis são inicializadas com o valor padrão durante a desserialização e a atribuição ou restauração do valor deve ser tratada pelo código do aplicativo.
Para mais informações, consulte o meu blog:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html
transientvariável não pode ser usada junto com a staticpalavra-chave é que as variáveis estáticas pertencem a uma classe e não a nenhuma instância individual. O conceito de serialização diz respeito ao estado atual do objeto. Somente os dados associados a uma instância específica de uma classe é serializado, portanto, campos de membro estático são ignorados durante a serialização
statice transientdeve ser usado em conjunto. O problema é que faz pouco sentido, porque os mecanismos de serialização típicos não persistem estática de qualquer maneira.
Volátil significa que outros threads podem editar essa variável específica. Portanto, o compilador permite acesso a eles.
http://www.javamex.com/tutorials/synchronization_volatile.shtml
Transitório significa que, quando você serializa um objeto, ele retornará seu valor padrão na desserialização
Transitório:
Primeiro, precisamos saber onde ele precisava, como preencher a lacuna.
1) Um transitório do modificador de acesso é aplicável apenas ao componente variável. Não será usado com método ou classe.
2) A palavra-chave transitória não pode ser usada junto com a palavra-chave estática.
3) O que é serialização e onde é usado? Serialização é o processo de tornar o estado do objeto persistente. Isso significa que o estado do objeto é convertido em um fluxo de bytes para ser usado para persistir (por exemplo, armazenar bytes em um arquivo) ou transferir (por exemplo, enviar bytes pela rede). Da mesma maneira, podemos usar a desserialização para recuperar o estado do objeto de bytes. Este é um dos conceitos importantes na programação Java, porque a serialização é usada principalmente na programação de redes. Os objetos que precisam ser transmitidos pela rede precisam ser convertidos em bytes. Antes de entender a palavra-chave transitória, é preciso entender o conceito de serialização. Se o leitor souber sobre serialização, pule o primeiro ponto.
Nota 1) Transitório é usado principalmente para o processo de serialização. Para isso, a classe deve implementar a interface java.io.Serializable. Todos os campos da classe devem ser serializáveis. Se um campo não for serializável, ele deve ser marcado como transitório.
Nota 2) Quando o processo desserializado ocorre, eles são configurados com o valor padrão - zero, falso ou nulo conforme a restrição de tipo.
Nota 3) Palavra-chave transitória e sua finalidade? Um campo declarado com modificador transitório não participará do processo serializado. Quando um objeto é serializado (salvo em qualquer estado), os valores de seus campos transitórios são ignorados na representação serial, enquanto o campo diferente dos campos transitórios participará do processo de serialização. Esse é o principal objetivo da palavra-chave transitória.