Java中volatile和transient的區別


volatile關鍵字用於多執行緒環境中,多個執行緒同時讀寫同一個變數。volatile關鍵字將更改直接重新整理到主記憶體,而不是CPU快取。

另一方面,transient關鍵字用於序列化。標記為transient的欄位不能成為序列化和反序列化的部分。如果我們不想儲存任何變數的值,則可以使用transient關鍵字修飾該變數。

序號關鍵字VolatileTransient
1
基礎
volatile關鍵字用於將更改直接重新整理到主記憶體
transient關鍵字用於在序列化過程中排除變數
2.
預設值
volatile變數不會初始化為預設值。
在反序列化期間,transient變數將初始化為預設值
3
靜態
volatile可以與靜態變數一起使用。
transient不能與static關鍵字一起使用
4
final
volatile可以與final關鍵字一起使用
transient不能與final關鍵字一起使用

Transient示例

// A sample class that uses transient keyword to
// skip their serialization.
class TransientExample implements Serializable {
   transient int age;
   // serialize other fields
   private String name;
   private String address;
   // other code
}

Volatile示例

class VolatileExmaple extends Thread{
   boolean volatile isRunning = true;
   public void run() {
      long count=0;
      while (isRunning) {
         count++;
      }
      System.out.println("Thread terminated." + 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);
   }
}

更新於:2019年11月18日

9K+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告