transient是在系列化的时候不需要持久化的对象修饰关键字。volatile不知道。JAVA中好象没有吧。

解决方案 »

  1.   

    transient是不能被串行化
    volatile不知道
      

  2.   

    transient??上面的几位大哥,能不能说清楚点,怎么跟书说的一样,简单啊小弟领悟有限啊
    volatile??书上说是可以被程序其它部分改变(如多线程)它跟C++里面的volatile有什么区别啊,
      

  3.   

    一般情况下,序列化时会把所有field全部写到流(你可以当作文件来考虑)里,有时并不是所有field都是那么有用。
    打个比方吧!你的类中有一个method计算非常耗时,而每次计算的结果都是一样的,这时你可能会考虑以lazy的方式来计算,就是第一次用的时候才开始具体计算,然后,在类里用一个field把这个结果保存起来,这样程序的效率就会得到提高。OK,现在你要对这个类做序列化了,这个field是类的一部分,但保存它并没有什么太大的意义,即便反序列化之后再用到,无非就是再算一次就可以了。你决定不对这个field进行序列化,这时就是transient起作用的时候了,有了它,序列化时就不会把它夜写到流里。当然,反序列化时,也没有它什么事!volatile,查了一下《Effective Java》,这个关键字可以保证任何一个线程再读取一个域的时候都将会看到最近刚刚被写入的值。而《C++程序设计语言》中写道,它是给编译程序的一个提示,说明这个变量的值可能以语言未描述的方式改变,因此必须避免去做过于激进的优化。从二者的描述看来,双方相差无几,以volatile描述的变量实际上都会在线程运作之外发生改变。实际编写程序时几乎没有用过,只好就事论事的理解一番了。