Java中的transient和volatile之间有什么区别?

瞬变实例变量被标记为瞬态,以指示JVM在序列化包含它的对象时跳过特定变量。该修饰符包含在创建变量的语句中,该语句位于变量的类或数据类型之前。

示例

public transient int limit = 55;   // will not persist
public int b;   // will persist

volatile: volatile修饰符用于让JVM知道访问该变量的线程必须始终将其自身的变量私有副本与内存中的主副本合并。

访问易失性变量将同步所有在主存储器中缓存的变量副本。可变变量只能应用于对象类型或私有类型的实例变量。易失性对象引用可以为null。

示例

public class MyRunnable implements Runnable {
   private volatile boolean active;
   public void run() {
      active = true;
      while (active) {    
      }
   }
   public void stop() {
      active = false;  
   }
}