2011-07-09 31 views
10

Khi nào chúng tôi nên sử dụng ReentrantReadWriteLock so với đồng bộ hóa từ khóa trong môi trường đa luồng trong Java?ReentrantReadWriteLock so với đồng bộ

Lợi ích của việc sử dụng ReentrantReadWriteLock qua được đồng bộ hóa trong Java là gì?

Bất kỳ ai cũng có thể đưa ra ví dụ (bằng Java) không?

Cảm ơn!

+1

Bạn có thể muốn đọc chủ đề này và sau đó xem có cách nào tốt hơn để đặt câu hỏi của bạn hay không, tùy theo điều bạn đang làm, cách mã của bạn đang truy cập các đối tượng/biến. http://forum.ragezone.com/f683/synchronised-vs-reentrantlocks-696540/ –

Trả lời

18

Đồng bộ cho phép trong một chuỗi tại một thời điểm.

Đọc/ghi khóa cho phép nhiều người đọc cùng một lúc, nhưng chỉ khi không có người viết nào đã tham gia. Do đó, trong một số trường hợp sử dụng, chúng tôi có thể có được sự tương tranh tốt hơn, vì người đọc có thể tiến hành cùng nhau.

Java API documentation cho ví dụ về các lớp thu thập được dự kiến ​​sẽ có nhiều người đọc hơn nhà văn.

11

locking article by Brian giải thích chi tiết những ưu và nhược điểm của từng phương pháp.

Các Khóa khuôn khổ là một thay thế tương thích cho đồng bộ, trong đó cung cấp nhiều tính năng không được cung cấp bởi đồng bộ, cũng như triển khai cung cấp tốt hơn hiệu suất dưới tranh. Tuy nhiên, sự tồn tại của những lợi ích rõ ràng này không phải là một lý do đủ tốt để luôn luôn thích ReentrantLock để đồng bộ. Thay vào đó, hãy đưa ra quyết định trên cơ sở liệu bạn có cần sức mạnh của ReentrantLock hay không. Trong hầu hết các trường hợp, bạn sẽ không - đồng bộ hóa hoạt động chỉ tiền phạt, hoạt động trên tất cả các JVM, được hiểu là bởi một phạm vi rộng hơn các nhà phát triển và là ít xảy ra lỗi hơn. Lưu khóa cho khi bạn thực sự cần nó. Trong những trường hợp đó, bạn sẽ rất vui vì bạn có nó.

Các vấn đề liên quan