当前页面: 开发资料首页 → J2SE 专题 → 惊奇的J2SE发现
惊奇的J2SE发现
摘要: 惊奇的J2SE发现
写了3年JAVA了, 今天无意看了看java所有的关键字,居然发现2个从来没用过,也不知道是什么含义?
transient 和 volatile
哪个高人解释解释~ 菜鸟洗耳尊听
呵呵
transient 高精度
volatile 多线程时可以保证同步
transient 序列化时忽略
volatile 强制同步
不过我只用过volatile,第一个写这两年也没有用过.
错了 strictfp才是高精度
transient 修饰字段用, 序更化时忽略此字段
transient,用来表示一个域不是该对象序列化的一部分。当一个对象被序列化的时候,
transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
例如ArrayList 序列化之后值会丢失,而size不变
多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,就该把该变量声明为volatile(不稳定的)即可,这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。
太抽象了,有没有实际使用情况
偶只知道意思,也麽用过
看看effective java
mark.
加深一下印象~~
volatile有点类似于C++中的auto,将值放在cpu寄存器中
加油啊!
transient 序列化时忽略
volatile 强制同步
这两个都用的少啊!用到的时候在去研究啊!
学习一招,谢谢!
倒
这两个用的根本不少哦
比如我们做WS;需要在网络上传递的东西,常用transient;
有人说常用EJB远程调用,为什么不用呢? 焦点就是:一些可以通过已经有的内容恢复的内容,可以用这个关键字修饰
在
在线程中常用volatile ;不过现在更喜欢用ThreadLocal
o
upmark
mark
transient
这个我知道
用来修辞对象属性的.序列化对象的时候,忽略用它修辞的属性.
我好像也没有用过啊
transient 当被序列化的对象中一些属性具有不可重现的特点的时候,比如说是临时分配的ip地址等等,需要加上此关键字
volatile可以用ThreadLocal代替,线程变量副本,每一个线程拥有该变量的一个副本,互不干扰