Tive fusaçando alguns componentes do Swing e vi que tem varios atributos com volate e transient.
Mas o que significa o seu uso? Quando utilizar? transient só quando não quiser serializar?
Variaveis - Simples volate e transient
2 Respostas
transient = ignore este atributo na serialização.
volatile = A JVM não faz cache do atributo e garante que ele será igual em todas as threads.
Entender o transient não é muito difícil, já o volatile costuma ser bem difícil digerir.
Na serialização, os atributos dos objetos são lidos e escritos um a um. Os que forem transient são pulados.
Cada thread mantém uma cache. Por vezes ocorre do atributo x do objeto y estar nesta cache. Desta forma, se a Thread A tem o objeto y na cache e altera o valor do atributo x, a thread B não verá esta mudança imediatamente. A Thread B só verá a mudança quando o valor do atributo x sair da cache da Thread A para a memória principal e dali para a cache da Thread B. Esse comportamento de cache das threads aumenta bastante o desempenho, mas em alguns casos pode ocasionar problemas se você tiver várias threads. Aí é que entra o volatile. O volatile significa “não coloque isso em caches”.
Há algumas outras coisas que podem dar flush em caches sem ser o volatile. Acho (não tenho 100% de certeza) que quando uma thread entra em um bloco synchronized, ela sincroniza a cache.
Então neste caso que to trabalhando com meus proprios componentes o cache o qual vc falou não é necessario?
Assim tenhopublic FTPanel<T> extends JPanel{
private T object;
private Object old; // Neste caso este objeto poderia marca-lo com volate, pois não desejo o seu valor em outra Thread
private String nameClasse;
// Mais atributos e metodos sobrescritos
}
Este valor deste atributo old desejo apenas para uma Thread, como faria?
Agora a pergunta que muitos estão fazendo, pra que tudo isso?
É que desejo cada vez mais conhecer a linguagem e utiliza-la da melhor maneira e tambem ganhar desempenho com codigos enxutos e simples, e logico desciminar este conhecimento