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

ความแตกต่างระหว่างการล็อกระดับอ็อบเจ็กต์และการล็อกระดับคลาสใน Java


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

  • Object Level Locks − สามารถใช้ได้เมื่อคุณต้องการวิธีที่ไม่คงที่หรือบล็อกที่ไม่คงที่ของโค้ดควรเข้าถึงได้ด้วยเธรดเดียวเท่านั้น
  • การล็อกระดับคลาส − สามารถใช้ได้เมื่อเราต้องการป้องกันไม่ให้หลายเธรดเข้าสู่บล็อกที่ซิงโครไนซ์ในอินสแตนซ์ใดๆ ที่มีอยู่ทั้งหมดบนรันไทม์ ควรใช้เพื่อทำให้เธรดข้อมูลแบบคงที่ปลอดภัยเสมอ
ซีเนียร์ เลขที่
คีย์
การล็อกระดับวัตถุ
การล็อกระดับคลาส

1

พื้นฐาน

สามารถใช้ได้เมื่อคุณต้องการวิธีการแบบ non-static หรือบล็อค non-static ของโค้ดที่ควรเข้าถึงโดยเธรดเดียวเท่านั้น

สามารถใช้เมื่อเราต้องการป้องกันไม่ให้หลายเธรดเข้าสู่บล็อกที่ซิงโครไนซ์ในอินสแตนซ์ที่มีอยู่ทั้งหมดบนรันไทม์

2

คงที่/ไม่คงที่

ควรใช้เพื่อทำให้เธรดข้อมูลที่ไม่คงที่ปลอดภัยเสมอ

ควรใช้เพื่อทำให้เธรดข้อมูลแบบคงที่ปลอดภัยเสมอ


3

จำนวนล็อค

ทุกวัตถุในชั้นเรียนอาจมีล็อคของตัวเอง

อาจมีออบเจ็กต์ของคลาสหลายตัว แต่จะมีการล็อกอ็อบเจ็กต์คลาสของคลาสหนึ่งเสมอ

ตัวอย่างการล็อกระดับคลาส

public class ClassLevelLockExample {
   public void classLevelLockMethod() {
      synchronized (ClassLevelLockExample.class) {
         //DO your stuff here
      }
   }
}

ตัวอย่างการล็อกระดับวัตถุ

public class ObjectLevelLockExample {
   public void objectLevelLockMethod() {
      synchronized (this) {
         //DO your stuff here
      }
   }
}