AtomicInteger จัดการการซิงโครไนซ์หรือไม่

Aug 17 2020

หากสองเธรดทั้งสองเพิ่มขึ้นเหมือนกันint iโดยใช้i ++เราอาจพบปัญหาเนื่องจากi ++ไม่ใช่การทำงานของอะตอม นั่นคือเหตุผลที่มีAtomicInteger.increment()ซึ่งทำให้อะตอมเพิ่มขึ้น ดังนั้นหากเรามี 1 คอร์และ 2 เธรดที่ทำ.increment()อยู่อาจไม่มีปัญหาอย่างแน่นอน (เนื่องจากไม่สามารถระงับได้ระหว่างการทำงาน)

แต่ถ้าเรามี 2 คอร์และ 2 เธรดและมันขนานกัน (ในเวลาเดียวกัน) เรียกสิ่งนั้นincrement()ล่ะ?

มีความเป็นไปได้หรือไม่ที่พวกเขาจะโหลดค่าเดียวกันint i? ความหมายถ้าint iเป็น1ผลสุดท้ายจะเป็น2และไม่ได้3 ในกรณีนี้เราไม่สนใจว่ามันจะเป็นการทำงานของอะตอมหรือไม่เพราะทั้งสองใช้ค่าเดียวกันในเวลาเดียวกัน ..

บรรทัดล่าง: การซิงโครไนซ์จัดการโดย AtomicInteger หรือไม่

คำตอบ

3 Joni Aug 17 2020 at 12:04

มีความเป็นไปได้หรือไม่ที่พวกเขาจะโหลดค่าเดียวกันint i?

ใช่มี แต่จัดการให้คุณ

incrementAndGetวิธีการใช้อะตอม "การเปรียบเทียบและชุด" การดำเนินการที่ชุดมูลค่าเพิ่มขึ้นแต่ถ้าค่าใหม่ไม่ได้ถูกกำหนดไว้แล้ว หากการเปรียบเทียบล้มเหลวให้incrementAndGetดึงค่าใหม่และลองอีกครั้ง

เอฟเฟกต์สุทธิคือปลอดภัยที่จะใช้incrementAndGetจากหลายเธรด