Uso de volatile e transient

Amigos,
O que de fato acontece, quando eu defino uma variavel volatile e/ou transient, quando se diz respeito a serializacao e a threds.

Desde ja agradeço!!

Cada thread tem um cache local, que permite maximizar o paralelismo. Se você acessar uma variável num contexto não sincronizado por duas threads diferentes, pode ocorrer de cada thread enxergar um valor diferente. Quer dizer, uma thread pode alterar o valor da variável, e a outra pode ainda continuar lendo o valor antigo, guardado no seu cache local. É por isso que getters, mesmo simplesmente retornando um valor, também devem ser sincronizados.

Declarando a variável como volatile, você impede esse cache. Isso evitaria o uso de sincronização em alguns contextos, mas abusar desse recurso pode ter impacto negativo em performance.

No caso do transient, você usa para indicar variáveis que não serão serializadas. Boa parte dos frameworks de serialização automática não usam esse modificador, preferindo usar annotations para ter mais controle. Até pq, a maior parte das serializações hoje não são binárias, e sim em xml ou bd.