Variaveis - Simples volate e transient

2 respostas
71C4700

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?

2 Respostas

victorwss

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.

71C4700

Então neste caso que to trabalhando com meus proprios componentes o cache o qual vc falou não é necessario?

Assim tenho
public 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

Criado 27 de fevereiro de 2009
Ultima resposta 27 de fev. de 2009
Respostas 2
Participantes 2