`
eriol
  • 浏览: 409208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

transient, volatile和strictfp关键字

    博客分类:
  • Java
阅读更多

transient

 

      如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。它被用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。(因为涉及到安全问题,所以并不希望把类里面所有的东西都能存储。使用transient这个关键字,它的意思是临时的,即不会随类一起序列化到本地,所以当还原后,这个关键字定义的变量也就不再存在。)

 

例如:

 

class T {
    transient int a;
    int b;
}

 

 

则如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。

 

 

volatile

 

 

    volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

 Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

 而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

 使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

 

 

 

strictfp

 

    用strictfp修饰类或方法,可以确保浮点运算准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。 

    strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。 

你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字。

分享到:
评论

相关推荐

    JAVA笔试总结 -- 非常全面

    native,transient,volatile,strictfp,CMM,synchronized,java socket,压缩与解压缩,多线程,垃圾回收算法,JVM ClassLoader,IO流,反射机制,JNDI, GUI布局管理器,JMS, Java Mail, JNDI reference,java事件处理...

    Java基础标识符关键字数据类型PPT教案学习.pptx

    private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native、transient 等修饰符关键字;try、catch、finally、throw、throws 等异常处理关键字;new、extends、implements、...

    java学习_java语法基础

    浮点数计算的精度问题可以通过使用strictfp关键字来控制,它确保浮点计算遵循FP-strict规则,保证跨平台的数值一致性。另一方面,transient关键字用于标记一个成员变量,表示该变量不应被序列化,即不会被保存在持久...

    java 关键字查询文档

    50 多个关键字,它们包括但不限于 `abstract`、`assert`、`boolean`、`break`、`byte`、`case`、`catch`、`char`、`class`、`const`(虽然未使用)、`continue`、`default`、`do`、`double`、`else`、`enum`、`...

    Java标识符、关键字和保留字

    - 修饰方法、类、属性和变量关键字:如`static`、`final`、`native`、`synchronized`、`transient`、`volatile`、`strictfp`,用于提供额外的信息来修饰类、方法和变量。 - 异常处理关键字:如`try`、`catch`、`...

    Java面试宝典2015

    strictfp关键字的使用 - `strictfp`关键字用于确保浮点运算的一致性和准确性。当一个类或方法被声明为`strictfp`时,其内部所有的浮点运算都将遵循IEEE-754标准,从而保证跨平台的运算结果一致性。这对于依赖于...

    java关键字,适合新手的ppt

    修饰符如`private`, `public`, `protected`定义了访问权限,`final`, `static`, `abstract`, `native`, `synchronized`, `volatile`, `strictfp`, `transient`分别用于定义不可变对象、静态成员、抽象方法、本地方法...

    源码关键字统计.rar

    `switch`, `synchronized`, `this`, `throw`, `throws`, `transient`, `try`, `void`, `volatile`, `while`。可以创建一个关键字列表,然后遍历每行代码,检查是否包含这些关键字。 为了提高效率,我们可以使用...

    java中的关键字大全

    在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释和示例。 #### 关键字...

    基础标识符关键字数据类型PPT课件.pptx

    - **方法、变量和类修饰符**:private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native和transient,这些修饰符用于控制访问权限、确定变量和方法的特性,以及类的实现方式...

    JAVA常见面试题及解答

    1. **`transient` 和 `volatile` 关键字**: - `transient` 关键字用于标记一个实例变量,表明该变量在序列化时不应被持久化。这意味着当对象被序列化并存储到持久化存储中时,`transient`修饰的变量不会被保存,而...

    java面试题大全

    1. **关键字 transient 和 volatile**: - `transient` 是Java的关键字,用于标记字段,表明该字段的值不会在序列化过程中被持久化。这意味着当对象被序列化后,被`transient`修饰的变量将不会包含在序列化的表示中...

    Java中的保留字和关键字.doc

    本文将详细介绍Java中的关键字和保留字,并探讨它们在程序开发中的应用。 #### 二、Java关键字详解 Java关键字是对Java编译器有特殊意义的词,它们用于表示特定的数据类型或程序结构。Java的关键字不能用作变量名...

    Java关键字

    50. **volatile** - 用于共享变量,确保多线程环境中的可见性和顺序一致性。 51. **while** - 循环结构,先检查条件再执行循环体。 以上就是Java的48个关键字的概述,它们构成了Java编程的基础,理解并熟练掌握...

    java编程全部关键字解释

    这只是Java关键字的一部分,还有许多其他关键字,如 `float`, `for`, `if`, `import`, `instanceof`, `new`, `package`, `return`, `static`, `strictfp`, `super`, `this`, `throw`, `throws`, `transient`, `try`,...

    java关键字.pdf

    2. 类、方法和变量修饰符:abstract、final、static、transient、volatile - abstract表示抽象类或方法,抽象类不能实例化,抽象方法必须在子类中实现。 - final表示最终的,用于类表示不可继承,用于方法表示不可...

    01-Java语言基础(关键字)

    以上仅是Java关键字的一部分,还有许多其他关键字,如`synchronized`, `volatile`, `transient`, `native`, `strictfp`等,它们各自承担着特定的功能。理解和熟练使用这些关键字是成为一名合格的Java程序员的基础。...

    Java的关键字与保留字

    在深入探讨Java的关键字与保留字之前,我们首先需明确两个概念:关键字和保留字。在编程语言中,关键字是预定义的具有特殊含义的标识符,它们在编译时被解析器识别并执行特定的功能;而保留字则是语言设计者为未来...

    java关键字和java命名规范.pdf

    Java关键字和命名规范是Java编程语言中的基础概念,它们对于编写清晰、规范的代码至关重要。Java关键字是Java语言内置的、具有特殊用途的保留字,而命名规范则是关于如何给类、方法、变量等命名的约定。 ### Java...

    Java关键字的用法

    `strictfp`关键字用于保证浮点运算的一致性和精确度。 **示例:** ```java public strictfp class Calculator { public float multiply(float a, float b) { return a * b; } } ``` #### 39. `super` `super`...

Global site tag (gtag.js) - Google Analytics