Java中volatile和transient的區別
volatile關鍵字用於多執行緒環境中,多個執行緒同時讀寫同一個變數。volatile關鍵字將更改直接重新整理到主記憶體,而不是CPU快取。
另一方面,transient關鍵字用於序列化。標記為transient的欄位不能成為序列化和反序列化的部分。如果我們不想儲存任何變數的值,則可以使用transient關鍵字修飾該變數。
序號 | 關鍵字 | Volatile | Transient |
---|---|---|---|
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); } }
廣告