2010-01-19 62 views
6

Mối quan hệ với các đối tượng an toàn và không thay đổi được là gì? Liệu nó có dễ dàng hơn để chia sẻ một tài nguyên duy nhất giữa nhiều luồng không? Nếu các đối tượng bất biến là phi trạng thái, chúng có thể được gộp chung trong một thùng chứa như một thùng chứa J2EE không?Đối tượng bất biến là gì?

cảm ơn

Trả lời

5

Đối tượng chủ đề an toàn là các đối tượng cho phép truy cập đồng thời bởi nhiều chuỗi. Việc đảm bảo thực hiện của chúng (ví dụ bằng các phương thức khóa/đồng bộ hóa/...) mà chúng sẽ không đi vào trạng thái không hợp lệ. Ngoài ra, không nên mất dữ liệu.

Các đối tượng không thể thay đổi có thể không bị thay đổi sau khi tạo. Vì vậy: Có, họ là một số loại không quốc tịch.

Vì không thể thay đổi các đối tượng bất biến, không cần phải khóa - đọc truy cập vào các đối tượng luôn là luồng an toàn (khi không sửa đổi biến). Do đó, các đối tượng bất biến thực sự luôn là luồng an toàn.

+1

Các đối tượng không quốc tịch thường không có trạng thái. Các đối tượng không thể thay đổi không thể chuyển sang trạng thái khác với trạng thái chúng được tạo ra, vì vậy chúng có chính xác một trạng thái. –

4

Đối tượng không thể thay đổi: Một đối tượng không thay đổi trạng thái bên trong.

Mối quan hệ với an toàn luồng: nếu đối tượng không thể đột biến, bạn có thể an toàn sử dụng đối tượng trên các chuỗi, tức là không cần khóa hoặc tương tự để đảm bảo nhất quán.

10

Đối tượng không thể thay đổi là các đối tượng không thể thay đổi được. Nếu một đối tượng không thể thay đổi, thì không có lo ngại rằng một thread cạnh tranh sẽ thay đổi trạng thái đối tượng "đằng sau lưng" của chuỗi thực hiện, và do đó các đối tượng không thay đổi không cần được bảo vệ thông qua đồng bộ hóa hoặc một số kỹ thuật khác.

+1

cũng nếu đối tượng không quốc tịch là vô nghĩa khi nói về bất biến, vì không có trạng thái đột biến. Vì vậy, là an toàn để bơi các đối tượng trong một container. – Mauricio

+0

Một điều cần xem xét là nếu bạn cố gắng thay đổi một đối tượng bất biến (nói, một chuỗi) bằng cách gán lại một biến trỏ đến đối tượng đó, thì các chủ đề khác sẽ không thấy thay đổi đó. Vì vậy, "thay đổi" đối với một đối tượng không thể thay đổi không thể được chia sẻ qua các chủ đề. – Aaron

+0

Nếu bạn cố gắng và 'thay đổi' bất kỳ đối tượng nào bằng cách gán lại một biến tham chiếu đến đối tượng đó, thì bạn không biết mình đang làm gì. –

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