English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java中volatile和transient之间的区别

Das Schlüsselwort 'volatile' wird in Multithreading-Umgebungen verwendet, in denen zwei Threads gleichzeitig auf denselben Variable lesen und schreiben. Das Schlüsselwort 'volatile' schreibt Änderungen direkt in das Hauptgedächtnis zurück, anstatt in den CPU-Cache. 

Andererseits wird der Schlüsselwort 'transient' während des Serialisierungsprozesses verwendet. Felder, die als transient markiert sind, können nicht Teil der Serialisierung und Deserialisierung sein. Wir möchten keine Werte von Variablen speichern, daher verwenden wir den Schlüsselwort 'transient' zusammen mit dieser Variable. 

NummerSchlüsselFlüchtigTemporär
1
Grundlegend 
Der Schlüsselwort 'volatile' wird verwendet, um Änderungen direkt in das Hauptgedächtnis zu schreiben
Transient-Schlüsselwörter werden verwendet, um Variablen während der Serialisierung auszuschließen 
2。
默认值 
挥发性不使用默认值初始化。
反序列化期间,将使用默认值初始化瞬态变量 
3
静态的 
易失性可以与静态变量一起使用。
暂时不能与static关键字一起使用
4
最后 
可以与final关键字一起使用
瞬态不能与final关键字一起使用

瞬态示例

// A sample class that uses transient keyword to
//跳过其序列化。
class TransientExample implements Serializable {
   transient int age;
   //序列化其他字段
   private String name;
   private String address;
   //其他代码
}

挥发性例子

class VolatileExmaple extends Thread{
   boolean volatile isRunning = true;
   public void run() {
      long count = 0;
      while (isRunning) {
         count++;
      }
      System.out.println("线程终止。"); + count);
   }
   public static void main(String[] args) throws InterruptedException {
      VolatileExmaple t = new VolatileExmaple();
      t.start();
      Thread.sleep(2000);
      t.isRunning = false;
      t.join();
      System.out.println("isRunning set to "); + t.isRunning);
   }
}