Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa Object Level Lock và Class Level Lock trong Java

Trong môi trường đa luồng (multithreading), hai hoặc nhiều luồng có thể truy cập tài nguyên chia sẻ cùng lúc dẫn đến hành vi không nhất quán của hệ thống. Java dùng khái niệm locks (khóa) để hạn chế truy cập đồng thời vào tài nguyên/đối tượng chia sẻ. Locks có thể áp dụng ở hai cấp độ:

  • Object Level Locks: Dùng khi muốn phương thức non-static hoặc block code non-static chỉ được truy cập bởi một luồng.
  • Class Level Locks: Dùng khi muốn ngăn nhiều luồng vào synchronized block trong tất cả instance có sẵn tại runtime. Luôn dùng để làm cho dữ liệu static thread-safe.
STT Tiêu chí Object Level Lock Class Level Lock
1 Cơ bản Dùng khi muốn non-static method/block chỉ truy cập bởi 1 thread Dùng khi muốn ngăn multiple threads vào synchronized block trong tất cả instance runtime
2 Static/Non-Static Luôn dùng để làm non-static data thread-safe Luôn dùng để làm static data thread-safe
3 Số lượng Lock Mỗi object của class có lock riêng Nhiều object của class tồn tại nhưng chỉ có 1 class object lock

Ví dụ Class Level Lock

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

Ví dụ Object Level Lock

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