2011-08-20 32 views
9

Tôi tự hỏi nếu văn bản cho một biến dễ bay hơi sẽ buộc JVM để đồng bộ hóa tất cả các biến non-volatile vào bộ nhớ, ví dụ như vậy, những gì sẽ xảy ra trong đoạn mã sau:điều gì sẽ xảy ra sau khi ghi vào biến dễ bay hơi?

volatile int x; 
int y; 

y=5; 
x=10; 

x sẽ được ghi vào bộ nhớ , nhưng điều gì sẽ xảy ra với y? nó cũng sẽ được ghi vào bộ nhớ?

+1

y không được khai báo là dễ bay hơi ...? –

+1

không, cố tình nó không được khai báo là dễ bay hơi. và câu hỏi đặt ra là nếu viết vào một biến biến động có nghĩa là một rào cản bộ nhớ cho tất cả các biến. – Anonymice

+0

Tôi nghĩ nó sẽ phụ thuộc vào phiên bản Java của bạn ... –

Trả lời

5

Có, theo các quy tắc của the Java Language Specification (third edition) -- in particular section 17.4.4 - mỗi chuỗi xem giá trị mới x sau đó cũng sẽ thấy giá trị mới của y nếu chúng cố gắng đọc nó. Các chủ đề không đọc x không được đảm bảo sẽ bị ảnh hưởng.

Hãy coi chừng, tuy nhiên, bảo đảm này không có trong mô hình bộ nhớ của ấn bản thứ hai thứ hai của JLS. Ở đó, đọc và ghi dễ bay hơi không ảnh hưởng đến thứ tự các truy cập bộ nhớ không bay hơi.

+1

Đối với tất cả những người không có khả năng ánh xạ các phiên bản của đặc tả ngôn ngữ cho các phiên bản Java thực tế: Điều này có nghĩa là những gì Henning mô tả là đúng bắt đầu từ Java 1.5 trở lên;) – Voo

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