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);
}
}
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP