4
ความแตกต่างระหว่างสารระเหยและซิงโครไนซ์ใน Java
ฉันสงสัยว่าความแตกต่างระหว่างการประกาศตัวแปรเป็นvolatileและการเข้าถึงตัวแปรในsynchronized(this)บล็อกใน Java หรือไม่? ตามบทความนี้http://www.javamex.com/tutorials/synchronization_volatile.shtmlมีหลายสิ่งที่ต้องพูดและมีความแตกต่างมากมาย แต่ก็มีความคล้ายคลึงกันบ้าง ฉันสนใจข้อมูลนี้เป็นพิเศษ: ... การเข้าถึงตัวแปรที่เปลี่ยนแปลงได้ไม่เคยมีศักยภาพในการบล็อก: เราเพียง แต่ทำการอ่านหรือเขียนอย่างง่าย ๆ เท่านั้นซึ่งแตกต่างจากบล็อกที่ซิงโครไนซ์ที่เราจะไม่ยึดติดกับล็อคใด ๆ เนื่องจากการเข้าถึงตัวแปรระเหยไม่เคยมีการล็อคจึงไม่เหมาะสำหรับกรณีที่เราต้องการอ่าน - อัปเดต - เขียนเป็นปฏิบัติการอะตอมมิก (เว้นแต่ว่าเราพร้อมที่จะ "พลาดการอัพเดท"); พวกเขาหมายถึงอะไรโดยread-update-write ? การเขียนนั้นเป็นการอัปเดตหรือหมายความว่าการอัปเดตนั้นเป็นการเขียนที่ขึ้นอยู่กับการอ่านด้วยหรือไม่ ส่วนใหญ่แล้วเมื่อใดที่เหมาะสมที่จะประกาศตัวแปรvolatileมากกว่าเข้าถึงตัวแปรเหล่านั้นผ่านsynchronizedบล็อก? เป็นความคิดที่ดีที่จะใช้volatileกับตัวแปรที่ขึ้นอยู่กับอินพุตหรือไม่? ตัวอย่างเช่นมีตัวแปรที่เรียกrenderว่าอ่านห่วงการเรนเดอร์และตั้งค่าโดยเหตุการณ์ keypress หรือไม่