Tôi không chắc liệu từ khóa dễ bay hơi cũng có nên được sử dụng cho các nguyên thủy không. Tôi có một thành viên của lớp được thiết lập/gán bởi một luồng và được truy cập bởi một luồng khác. Tôi có nên tuyên bố thành viên này dễ bay hơi không?java - từ khóa dễ bay hơi cũng không phải là nguyên thủy
private /* volatile */ Object o;
public void setMember(Object o) {
this.o = o;
}
public Object getMember() {
return o;
}
Ở đây, setMember (...) được gọi bằng một chuỗi và getMember() được gọi bởi một chuỗi khác.
Nếu đó là một boolean, ví dụ, câu trả lời sẽ là có.
Tôi đang sử dụng Java 1.4 và thành viên trong trường hợp này là chỉ đọc. Vì vậy, tôi chỉ quan tâm đến khả năng hiển thị trong trường hợp này, do đó câu hỏi của tôi về từ khóa dễ bay hơi.
Chỉ tò mò về tuyên bố này - các thành viên của đối tượng mà trường đề cập cũng phải được thiết kế để truy cập đa luồng - sẽ tuyệt vời nếu bạn có thể mở rộng về lý do tại sao nó như vậy? – jtkSource
@jtkSource: dễ bay hơi chỉ ảnh hưởng đến trường, nhưng trường chỉ chứa tham chiếu. Vì vậy, dễ bay hơi đảm bảo rằng các luồng khác nhìn thấy các cập nhật cho tham chiếu đó, nhưng nếu đối tượng được gọi đến không sử dụng biến động hoặc đồng bộ đúng cách, thì các luồng khác có thể không nhìn thấy các cập nhật của các trường của đối tượng đó. –
chỉ cần suy nghĩ ra - vì vậy nếu một biến dễ bay hơi đề cập đến một đối tượng, không phải các biến không dễ bay hơi cũng được thực hiện 'visibile' một cách nhất quán trong bối cảnh của đối tượng tuyên bố nó dễ bay hơi? Nếu có các đối tượng khác cũng tham chiếu đến 'đối tượng được gọi' này theo cách không dễ bay hơi, thì chỉ những đối tượng đó có nguy cơ không nhìn thấy biến trong trạng thái nhất quán không? sẽ có một cơ hội mà có hai biểu diễn của cùng một đối tượng trong bộ nhớ? - Hãy cho tôi biết nếu tôi đã nhầm lẫn logic của tôi. – jtkSource