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

ความแตกต่างระหว่างความผันผวนและชั่วคราวในjava


คีย์เวิร์ดระเหยถูกใช้ในสภาพแวดล้อมแบบมัลติเธรดโดยที่เธรดสองเธรดอ่านและเขียนตัวแปรเดียวกันพร้อมกัน คีย์เวิร์ดระเหยจะล้างการเปลี่ยนแปลงโดยตรงไปยังหน่วยความจำหลักแทนแคชของ CPU

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

ซีเนียร์ เลขที่ คีย์ ระเหย ชั่วคราว
1
พื้นฐาน
คีย์เวิร์ดระเหยใช้เพื่อล้างการเปลี่ยนแปลงโดยตรงไปยังหน่วยความจำหลัก
คีย์เวิร์ดชั่วคราวใช้เพื่อแยกตัวแปรระหว่างการทำให้เป็นอนุกรม
2.
ค่าเริ่มต้น
Volatile ไม่ได้เริ่มต้นด้วยค่าเริ่มต้น
ในระหว่างการดีซีเรียลไลซ์เซชัน ตัวแปรชั่วคราวจะถูกเริ่มต้นด้วยค่าเริ่มต้น
3
คงที่
Volatile สามารถใช้กับตัวแปรคงที่ได้
ไม่สามารถใช้ชั่วคราวกับคำหลักคงที่
4
รอบชิงชนะเลิศ
Volatile สามารถใช้กับคีย์เวิร์ดสุดท้ายได้
ไม่สามารถใช้ชั่วคราวกับคำหลักสุดท้าย

ตัวอย่างชั่วคราว

// 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
}

ตัวอย่างความผันผวน

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);
   }
}