Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa ReentrantLock và Synchronized trong Java

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ộ.

Phương thức Hàm tạo
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
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
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
      }
   }
}