Trang web này đã đề cập rõ ràng sự khác biệt giữa ReentrantLock và từ khóa được đồng bộ hóa trong Java. Tôi chỉ cần sao chép và dán từ đó.
http://javarevisited.blogspot.in/2013/03/reentrantlock-example-in-java-synchronized-difference-vs-lock.html
1) Một khác biệt đáng kể giữa ReentrantLock và từ khóa synchronized là sự công bằng. từ khóa được đồng bộ hóa không hỗ trợ tính công bằng. Bất kỳ chủ đề nào cũng có thể lấy khóa khi được phát hành, không có sự ưu tiên nào có thể được chỉ định, mặt khác bạn có thể làm cho ReentrantLock công bằng bằng cách xác định tính công bằng, trong khi tạo ra thể hiện của ReentrantLock. Tài sản công bằng cung cấp khóa cho chuỗi chờ đợi dài nhất, trong trường hợp tranh chấp.
2) Sự khác biệt thứ hai giữa khóa đồng bộ và khóa Reentrant là phương thức tryLock(). ReentrantLock cung cấp phương thức tryLock() thuận tiện, chỉ mua khóa nếu nó có sẵn hoặc không được giữ bởi bất kỳ chủ đề nào khác. Điều này làm giảm chặn luồng chờ khóa trong ứng dụng Java.
3) Một sự khác biệt đáng chú ý đáng chú ý hơn giữa ReentrantLock và từ khóa được đồng bộ hóa trong Java là khả năng ngắt Thread trong khi đợi khóa. Trong trường hợp từ khóa được đồng bộ hóa, một chuỗi có thể bị chặn chờ khóa, trong một khoảng thời gian không xác định và không có cách nào để kiểm soát điều đó. ReentrantLock cung cấp một phương thức gọi là lockInterruptibly(), có thể được sử dụng để ngắt thread khi nó đang chờ khóa. Tương tự tryLock() với thời gian chờ có thể được sử dụng để hết giờ nếu khóa không có sẵn trong một khoảng thời gian nhất định.
4) ReentrantLock cũng cung cấp phương thức tiện lợi để có được Danh sách tất cả các chuỗi đang chờ khóa.
Nguồn
2017-04-02 06:02:15
"bất kỳ khách hàng nào có quyền truy cập trực tiếp vào khóa đồng bộ hóa đối tượng của bạn" chỉ khi bạn áp dụng công cụ sửa đổi 'đồng bộ hóa 'thành phương pháp có thể truy cập, chứ không phải nếu bạn sử dụng khối' đồng bộ' trên đối tượng khóa không thể truy cập. – Raedwald
Vâng. Đó là những gì tôi nói. Nếu bạn sử dụng từ khóa được đồng bộ hóa mặc định trên các phương pháp của mình, bạn sẽ xuất bản khóa của mình một cách hiệu quả. Để giải quyết vấn đề này, hãy tạo khối nội bộ được đồng bộ hóa. –