2010-07-21 43 views
7

Tôi có một mảng lớn được truy cập bằng nhiều chuỗi. Khóa đơn không đủ hiệu quả. Có khóa khóa phạm vi nào trong java hoặc scala không?khóa phạm vi trong java

+0

nếu mảng chỉ được truy cập và không được sửa đổi, thì bạn không cần bất kỳ loại khóa nào. (giả sử mảng được điền đầy đủ trước khi các chủ đề bắt đầu đọc, để đảm bảo các thay đổi ban đầu được xuất bản.) – mdma

Trả lời

1

Quấn mảng bên trong đối tượng an toàn chủ đề kiểm soát quyền truy cập. Bạn có thể tự quản lý phạm vi hoặc chia mảng thành các phạm vi, mỗi dải có khóa riêng và tham chiếu theo cách đó.

6

Không có trong thư viện chuẩn. ConcurrentHashMap làm điều này mặc dù, nội bộ đại diện cho bảng băm là "phân đoạn" (16 của chúng theo mặc định), nơi mỗi một được bảo vệ bằng một khóa riêng biệt. Ngoài ra, this thread hỏi cùng một câu hỏi ngoại trừ một ArrayList thay vì một mảng. Mặc dù không kết quả, nó mang lại lựa chọn thay thế nếu bạn có thể thỏa hiệp về cách sử dụng.

Cập nhật: Có lẽ AtomicReferenceArrayandfriends sẽ cung cấp hiệu quả bạn đang tìm kiếm, trong khi cùng một lúc "provid [ing] ngữ nghĩa truy cập dễ bay hơi với các yếu tố của mảng" (JCIP 15,3).

2

Nói chung, ngoại trừ nếu bạn có nhu cầu thực sự cụ thể về mặt đồng thời, bạn sẽ tìm thấy các đối tượng rất được tối ưu hóa và thuận tiện trong gói java.util.concurrent của jdk.

Tôi có thể đề xuất "Java Concurrency in Practice" của Brian Goetz, một cuốn sách rất hay giải thích rất nhiều điều về luồng trong gói java và java.util.concurrent.

0

Nó thực sự phụ thuộc vào cách sử dụng của bạn. Nếu bạn thực sự có nghĩa là ArrayList và không chỉ mảng, sau đó bạn có thể sẽ phải cuộn của riêng bạn và sọc khóa của bạn, như ArrayLists có thể thay đổi kích cỡ mà thực sự có thể vít lên un-sychronized đọc và viết.

Nếu tuy nhiên, bạn thực sự có nghĩa là mảng , tôi không chắc mình hiểu ý của bạn là gì. Bạn không cần khóa, mọi thứ sẽ hoạt động tốt mà không cần khóa. Một chủ đề khác có thể không thấy thay đổi ngay lập tức, nhưng đó không phải là kết thúc của thế giới.

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