transient关键字
- transient关键字可以应用于类的成员变量了,以便指出该成员变量不应在包含他的类实例已序列化时被序列化。
- 当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非trainsient型的变量时被包括进去的。
- java的serialization提供了一种持久化对象的实例机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上transient。
- transient用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中。
native
- native用于方法,表示该方法时Java以外语言实现的。
volatile
- 表示可以被多个线程异步修改的成员变量。
- 目标是为了确保所有线程所看到的变量值时相同的。在许多jvm中没有被实现。
- 可以被看做时较轻的synchronized,但volatile所需编码较少,开销也少,实现的也只是synchronized的一部分。
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰后,就具备了两层语义:
- 1) 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,新值对其他线程来说时立即可见的。
- 2)禁止进行指令重排序。