`
lizhensan
  • 浏览: 369465 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java中的两个关键字 volatile & transient

    博客分类:
  • java
 
阅读更多

volatile:当新建一个线程时,为了提高效率, 
他会将某些数据拷贝一份到自己这里,所以有可能 
你在线程中修改了数据,但是修改的只是你自己的备 
份而已,而不会影响到原始的数据。或者其他的线程修改了数据,
你这边却看不到,这样就可能对你的多线程程序造成影响。

使用volatile的时候,则不会对这个变量进行私有拷贝,这样,你的
多线程程序就不会出错了。但是需要注意的是,做私有拷贝对于提高
程序的效率,非常有益,所以记得只在必须的时候才使用volatile。


transient:表示当前变量在序列化的时候,不要进行序列化,
比如对于密码等敏感信息,或者一些本来序列化就没有意义的东西,
诸如数据库连接,可以使用此此关键字进行修饰。


附注:
1.在c++中的volatile,是禁用寄存器优化,这样的话,变量就是直接
存在存在内存的,就不会存在因为线程A将变量存在寄存器里,然后访问
的都是寄存器的,而线程B对于变量的修改,A就无法感知了,导致多线程
程序的错误。

2.一个小知识,在java中,long和double的赋值不是原子操作,而且他的基本
类型的赋值则都是原子的,但是如果加上volatile的话,则读写是原子的。
对引用(无论32bit或者64bit)的读写总是原子的。

 

http://blog.163.com/javaee_chen/blog/static/17919507720113138059122/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics