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

ความแตกต่างระหว่าง Object Level Lock และ Class Level Lock ใน Java

Locks ใน Multithreading

Java ใช้ locks จำกัดการเข้าถึง shared resources แบบ concurrent มี 2 ระดับ:

Object Level Lock

  • ใช้เมื่อต้องการ non-static method/block เข้าถึงได้เพียง thread เดียว
  • แต่ละ object instance มี lock ของตัวเอง
  • ทำให้ non-static data thread-safe

Class Level Lock

  • ใช้เมื่อต้องการป้องกัน multiple threads เข้า synchronized block ในทุก instances
  • ใช้สำหรับ static data thread-safety
  • ทุก instances แชร์ lock เดียวกัน (class object lock)

ตารางเปรียบเทียบ

KeyObject Level LockClass Level Lock
BasicNon-static method/block accessed by one threadPrevent multiple threads entering synchronized block in any instance
Static/Non-StaticNon-static data thread safetyStatic data thread safety
Number of Locksแต่ละ object มี lock ของตัวเองหลาย objects แชร์ class lock เดียว

ตัวอย่าง Class Level Lock

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

ตัวอย่าง Object Level Lock

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

สรุป

  • synchronized(this) = Object level lock
  • synchronized(MyClass.class) = Class level lock
  • เลือกตาม scope ของ data ที่ต้องการป้องกัน (instance vs static)