Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง volatile และ transient ใน Java

คีย์เวิร์ด volatile ใช้ในสภาพแวดล้อมมัลติเธรด (multithreading) ที่สองเธรดอ่านและเขียนตัวแปรเดียวกันพร้อมกัน คีย์เวิร์ด volatile จะส่งการเปลี่ยนแปลงไปยังหน่วยความจำหลัก (main memory) โดยตรง แทนที่จะเป็น CPU cache

ส่วคีย์เวิร์ด transient ใช้ในการทำ Serialization ฟิลด์ที่ถูกทำเครื่องหมายว่า transient จะไม่เป็นส่วนหนึ่งของ serialization และ deserialization หากเราไม่ต้องการบันทึกค่าของตัวแปรใด ให้ใช้คีย์เวิร์ด transient กับตัวแปรนั้น

ลำดับหัวข้อVolatileTransient
1พื้นฐานVolatile ใช้ส่งการเปลี่ยนแปลงไปหน่วยความจำหลักโดยตรงTransient ใช้เพื่อยกเว้นตัวแปรระหว่าง serialization
2ค่าเริ่มต้นVolatile ไม่ได้ถูกเริ่มต้นด้วยค่าเริ่มต้นระหว่าง deserialization ตัวแปร transient จะถูกเริ่มต้นด้วยค่าเริ่มต้น
3StaticVolatile ใช้กับตัวแปร static ได้Transient ไม่สามารถใช้กับคีย์เวิร์ด static ได้
4FinalVolatile ใช้กับคีย์เวิร์ด final ได้Transient ไม่สามารถใช้กับคีย์เวิร์ด final ได้

ตัวอย่าง Transient

// คลาสตัวอย่างที่ใช้ transient เพื่อข้ามการ serialize 
class TransientExample implements Serializable { 
    transient int age; 
    // serialize ฟิลด์อื่นๆ 
    private String name; 
    private String address; 
    // โค้ดอื่นๆ 
}

ตัวอย่าง Volatile

class VolatileExample 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 { 
        VolatileExample t = new VolatileExample(); 
        t.start(); 
        Thread.sleep(2000); 
        t.isRunning = false; 
        t.join(); 
        System.out.println("isRunning set to " + t.isRunning); 
    } 
}