Có hai cách để khóa tài nguyên được chia sẻ bởi nhiều luồng. Một là Reentrant Lock (Hoặc ReadWriteLock) và một là bằng cách sử dụng phương pháp Đồng bộ hóa.
Lớp ReentrantLock đã được cung cấp trong gói đồng thời Java từ Java 5.
Đó là việc triển khai giao diện Khóa và Theo tài liệu java, việc triển khai giao diện Khóa cung cấp nhiều hoạt động hơn những gì có thể đạt được bằng cách sử dụng phương pháp đồng bộ.
Sr. Không. | Phím | ReentrantLock | Được đồng bộ hóa |
---|---|---|---|
1 | Có được Khóa | Lớp khóa Reentrant cung cấp các phương thức lock () để khóa tài nguyên được chia sẻ theo luồng | Bạn chỉ cần viết từ khóa được đồng bộ hóa để có được khóa |
2 | Khóa phát hành | Để giải phóng khóa, lập trình viên phải gọi phương thức unlock () | Nó được thực hiện ngầm |
3 | Khả năng ngắt | Phương thức lockInterruptibly () có thể được sử dụng để ngắt luồng | Không có cách nào để ngắt luồng |
4 | Công bằng | Hàm tạo của lớp này có tham số công bằng. Nếu nó được đặt thành true thì khóa ưu tiên cấp quyền truy cập cho người chờ đợi lâu nhất * chủ đề | Khóa không đảm bảo bất kỳ quy tắc truy cập cụ thể nào |
5 | Khóa Lệnh phát hành | Khóa có thể được phát hành theo bất kỳ thứ tự nào | Khóa phải được phát hành theo cùng thứ tự mà chúng đã nhận được |
Ví dụ về ReentrantLock
public class ReentrantLockExample implements Runnable{ private Lock lock=new ReentrantLock(); @Override public void run() { try { lock.lock() //Lock some resource } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }
Ví dụ về SynchronizedLock
public class SynchronizedLockExample implements Runnable{ @Override public void run() { synchronized (resource) { //Lock some resource } } }