เป็นโปรแกรมหนึ่งที่เต็มไปด้วยคุณสมบัติมากมาย ในบทความนี้เราจะมาดูคุณสมบัติดังกล่าวซึ่งเป็นคำสำคัญที่เปลี่ยนแปลงได้ใน Java คำแนะนำต่อไปนี้จะกล่าวถึงในบทความนี้
ไปต่อกับบทความนี้เกี่ยวกับ Volatile Keyword ใน Java
คำสำคัญที่เปลี่ยนแปลงได้ถูกใช้เพื่อแก้ไขค่าของตัวแปรตามเธรดที่แตกต่างกัน นอกจากนี้ยังใช้เพื่อทำให้ชั้นเรียนปลอดภัย หมายความว่าเธรดหลายเธรดสามารถใช้เมธอดและอินสแตนซ์ของคลาสพร้อมกันได้โดยไม่มีปัญหา คำสำคัญที่ลบเลือนสามารถใช้ได้กับประเภทดั้งเดิมหรือวัตถุ
ตัวอย่าง
การทดสอบคลาส {static int var = 5}
ในตัวอย่างข้างต้นสมมติว่าสองเธรดกำลังทำงานบนคลาสเดียวกัน เธรดทั้งสองทำงานบนโปรเซสเซอร์ที่แตกต่างกันโดยที่แต่ละเธรดมีสำเนาของ var ในเครื่อง หากเธรดใด ๆ แก้ไขค่าการเปลี่ยนแปลงจะไม่แสดงในเธรดดั้งเดิมในหน่วยความจำหลัก นำไปสู่ความไม่สอดคล้องกันของข้อมูลเนื่องจากเธรดอื่นไม่ทราบถึงค่าที่แก้ไข
การทดสอบคลาส {static volatile int var = 5}
ในตัวอย่างข้างต้นตัวแปรคงคือสมาชิกคลาสที่ใช้ร่วมกันระหว่างออบเจ็กต์ทั้งหมด มีเพียงสำเนาเดียวในหน่วยความจำหลัก ค่าของตัวแปรระเหยจะไม่ถูกเก็บไว้ในแคช การอ่านและเขียนทั้งหมดจะดำเนินการจากและไปยังหน่วยความจำหลัก
ไปต่อกับบทความนี้เกี่ยวกับ Volatile Keyword ใน Java
ความแตกต่างระหว่างการซิงโครไนซ์และคีย์เวิร์ดที่ระเหยได้
คีย์เวิร์ดระเหยไม่ได้ใช้แทนคีย์เวิร์ดที่ซิงโครไนซ์ แต่สามารถใช้แทนคีย์เวิร์ดได้ในบางกรณี มีความแตกต่างดังต่อไปนี้:
java สองครั้งเป็น int รอบ
คีย์เวิร์ดระเหย | คีย์เวิร์ดการซิงโครไนซ์ |
Volatile keyword คือตัวปรับเปลี่ยนฟิลด์ | คีย์เวิร์ดที่ซิงโครไนซ์แก้ไขบล็อกโค้ดและวิธีการ |
ไม่สามารถปิดกั้นเธรดเพื่อรอในกรณีที่ระเหยได้ | สามารถบล็อกเธรดเพื่อรอในกรณีที่ซิงโครไนซ์ |
ปรับปรุงประสิทธิภาพของเธรด | วิธีการซิงโครไนซ์จะลดประสิทธิภาพของเธรด |
จะซิงโครไนซ์ค่าของตัวแปรทีละตัวระหว่างหน่วยความจำเธรดและหน่วยความจำหลัก | จะซิงโครไนซ์ค่าของตัวแปรทั้งหมดระหว่างหน่วยความจำเธรดและหน่วยความจำหลัก |
ฟิลด์ที่ระเหยไม่ได้อยู่ภายใต้การปรับแต่งคอมไพลเลอร์ | การซิงโครไนซ์ขึ้นอยู่กับการปรับให้เหมาะสมของคอมไพเลอร์ |
ไปต่อกับบทความนี้เกี่ยวกับ Volatile Keyword ใน Java
ตัวอย่าง:
คลาสสาธารณะ VolatileTest {private static final Logger LOGGER = MyLoggerFactory.getSimplestLogger () private static volatile int MY_INT = 0 public static void main (String [] args) {new ChangeListener (). start () new ChangeMaker (). start ()} คลาสแบบคงที่ ChangeListener ขยายเธรด {@Override public void run () {int local_value = MY_INT ในขณะที่ (local_value<5){ if( local_value!= MY_INT){ LOGGER.log(Level.INFO,'Got Change for MY_INT : {0}', MY_INT) local_value= MY_INT } } } } static class ChangeMaker extends Thread{ @Override public void run() { int local_value = MY_INT while (MY_INT <5){ LOGGER.log(Level.INFO, 'Incrementing MY_INT to {0}', local_value+1) MY_INT = ++local_value try { Thread.sleep(500) } catch (InterruptedException e) { e.printStackTrace() } } } } }
ดังนั้นเราจึงมาถึงตอนท้ายของบทความนี้เกี่ยวกับ 'Volatile Keyword in Java' หากคุณต้องการเรียนรู้เพิ่มเติมโปรดดู Java Training โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ Edureka’s หลักสูตรนี้ออกแบบมาเพื่อฝึกอบรมคุณสำหรับแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & Spring
มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อกนี้และเราจะติดต่อกลับโดยเร็วที่สุด