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
Trả lời
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 đó.
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).
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.
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.
- 1. java TreeSet ném IllegalArgumentException: chìa khóa ra khỏi phạm vi
- 2. Java Phạm vi tĩnh
- 3. Phạm vi Java đặc biệt
- 4. IntegrityError: vi phạm khóa ngoài khi xóa
- 5. Trong MongoDB java driver Mapreduce phạm vi lệnh; Thêm chức năng vào Phạm vi
- 6. Phạm vi và thư viện Java Class
- 7. Phạm vi mã Java ở Hudson
- 8. java: clone phương pháp vi phạm
- 9. java debugging - xem một biến phạm vi
- 10. Vi phạm truy cập ngoại lệ Java?
- 11. Chức năng phạm vi (min, max, value) trong Java
- 12. Phạm vi biến cục bộ cuối cùng trong java
- 13. Tại sao phạm vi byte -128 đến 127 trong Java?
- 14. Sử dụng biến phạm vi ứng dụng trong java
- 15. Phạm vi khóa trong C#: là đối tượng trả về vẫn "bị khóa"?
- 16. Tự động khóa/mở khóa bằng cách sử dụng phạm vi trong C++ (từ nền C#)
- 17. Tính năng khóa phạm vi hoạt động như thế nào?
- 18. Enumeration Phạm vi
- 19. Độc quyền kết thúc trong phạm vi Phạm vi của Scala
- 20. Phạm vi mã trong monotouch
- 21. Phạm vi "này" trong JavaScript
- 22. mySQL chọn trong phạm vi
- 23. Haskell - không trong phạm vi
- 24. Phạm vi biến trong C++
- 25. Phạm vi trong JSF 2
- 26. thử phạm vi khối
- 27. Phạm vi liên kết phạm vi C tiêu chuẩn
- 28. Tìm kiếm phạm vi CouchBase
- 29. Chuyển đổi Java: khai báo biến và phạm vi
- 30. Phạm vi quản lý và tuổi thọ đối tượng Trong phạm vi STL Vectors
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