ý nghĩa của vector trong Java là luồng an toàn và được đồng bộ hóa, làm thế nào để nó được tạo thành an toàn. Tôi đang xem chi tiết nội bộ về triển khaiĐồng bộ hóa trong Vectors trong Java
Trả lời
Các phương pháp được đánh dấu là synchronized
. Hãy xem Synchronized Method tutorial.
Vector
được coi là 'an toàn chỉ' vì việc truy cập các phần tử bên trong của Vector được đồng bộ hóa. Các phương thức như add()
, get()
, size()
, v.v ... đều được đồng bộ hóa để sửa đổi cấu trúc bên trong của Vector
và truy cập vào cấu trúc bên trong đó không thể xử lý đồng thời bằng các luồng riêng biệt.
Nó được tạo thành "an toàn chỉ" bởi tất cả các phương pháp được đồng bộ hóa (thông qua từ khóa được đồng bộ hóa), xem OpenJDK source code.
Từ khóa được đồng bộ hóa làm gì để ngăn chặn nhiều hơn một chuỗi thực thi bất kỳ phương thức đồng bộ nào cùng một lúc. Nó đang sử dụng một khóa trong nội bộ, mà một thread phải có được khi nhập vào của những phương thức đó, và rằng các thread phát hành khi nó rời khỏi phương thức. Lưu ý rằng điều này không thực sự giúp ích nhiều, bởi vì trong khi nó ngăn cản trạng thái nội tại không nhất quán của vec-tơ, điều này không đảm bảo mức độ nhất quán ở mức cao hơn (mức hữu ích cho một ứng dụng).
Hãy xem xét ví dụ này cho thấy rằng bạn vẫn cần phải sử dụng đồng bộ hóa trong mã ứng dụng của bạn (vì vậy mà bạn có thể chỉ cần cũng đã sử dụng ArrayList không đồng bộ):
// BROKEN CODE, needs external synchronization
// only add an element if the vector is empty
if(vector.isEmpty())
vector.add(anElement);
Hãy tìm ra những đoạn trích dưới đây từ java api
Trước tiên, không thể cho hai lần gọi các phương thức đồng bộ trên cùng một đối tượng để xen kẽ. Khi một luồng đang thực hiện một phương thức đồng bộ cho một đối tượng, tất cả các luồng khác gọi ra các phương thức đồng bộ cho cùng một khối đối tượng (tạm dừng thực hiện) cho đến khi luồng đầu tiên được thực hiện với đối tượng.
Thứ hai, khi một phương thức đồng bộ thoát, nó sẽ tự động thiết lập mối quan hệ xảy ra trước đó với bất kỳ lời gọi tiếp theo nào của phương thức được đồng bộ hóa cho cùng một đối tượng. Điều này đảm bảo rằng các thay đổi đối với trạng thái của đối tượng được hiển thị cho tất cả các luồng.
- 1. Java đồng bộ hóa trong mẫu đơn
- 2. Java: Mảng & Vectors
- 3. Hiệu suất của phần đồng bộ hóa trong Java
- 4. Xác nhận thứ tự đồng bộ hóa trong Java
- 5. hiệu ứng nhớ đồng bộ hóa trong Java
- 6. Cách đúng để đồng bộ hóa ArrayList trong java
- 7. Đồng bộ hóa trong chủ đề cho Java
- 8. Đồng bộ hóa()/wait()/notifyAll() làm gì trong Java?
- 9. Khối được đồng bộ hóa - Java
- 10. đồng bộ hóa các chủ đề java
- 11. "đồng bộ hóa (điều này)" so với "đồng bộ ((BaseClass) này)" trong Java?
- 12. Câu hỏi được đồng bộ hóa Java
- 13. Java Danh sách được đồng bộ hóa
- 14. Các chuỗi Java "đã đồng bộ hóa"
- 15. Đồng bộ hóa cuộc gọi không đồng bộ trong C#
- 16. đồng bộ hóa (this) vs đồng bộ hóa (MyClass.class)
- 17. Vectors trong Arduino
- 18. Đồng bộ hóa địa chỉ trong iOS
- 19. Đồng bộ hóa kiểu Etherpad trong Meteor?
- 20. Thao tác đồng bộ hóa trong Silverlight
- 21. Ngăn vòng lặp đồng bộ hóa mạng khi đồng bộ hóa từ mạng trong Android ContentProvider
- 22. Bộ sưu tập được đồng bộ hóa
- 23. Khối Java được đồng bộ hóa so với Collections.synchronizedMap
- 24. Java: Đồng bộ hóa một ExecutorService cần thiết?
- 25. Đồng bộ hóa IMAP
- 26. Được đồng bộ kế thừa trong Java?
- 27. "Đồng bộ" nghĩa là gì trong Java?
- 28. IO không đồng bộ trong Java?
- 29. Bộ điều hợp đồng bộ hóa liên hệ trong android
- 30. Thực hành tốt nhất trong các phương thức đồng bộ hóa trong jsf và java
+1 nhưng bạn nên sửa "Từ khóa được đồng bộ hóa làm gì để ngăn chặn nhiều hơn một chuỗi thực thi phương thức cùng một lúc". Nó không chỉ truy cập vào phương thức cụ thể bị chặn. – Fredrik
@Fredrik: Cảm ơn. Tôi đã cố sửa câu mà không bị quá phức tạp. Tôi cho rằng một liên kết đến một lời giải thích dài hơn sẽ theo thứ tự. – Thilo
Tôi có đúng không, trong đoạn mã mà bạn cung cấp, 'vector' có thể đã bị thay đổi (trở thành không trống) trước' vector.add (anElement); '? – soshial