Đúng là volatile
không gây ra sự chặn.
Tuy nhiên, báo cáo kết quả
một biến không ổn định là tốt hơn so với từ khóa synchronized vì nó không liên quan đến CHẶN hoặc bối cảnh chuyển đổi.
rất đáng tranh cãi và phụ thuộc rất nhiều vào những gì bạn đang cố gắng làm. volatile
không tương đương với khóa và tuyên bố biến dễ bay hơi không đưa ra bất kỳ đảm bảo nào liên quan đến tính nguyên tử của các phép toán trong đó biến đó có liên quan, ví dụ: tăng.
Điều gì volatile
làm là ngăn trình biên dịch và/hoặc CPU thực hiện lệnh sắp xếp lại hoặc bộ nhớ đệm của biến cụ thể. Điều này được gọi là hàng rào bộ nhớ. Cơ chế nhỏ khó chịu này là cần thiết để đảm bảo rằng trong một môi trường đa luồng, tất cả các luồng đọc một biến cụ thể đều có một cái nhìn cập nhật về giá trị của nó. Điều này được gọi là hiển thị và khác với nguyên tử.
Nguyên tử chỉ có thể được đảm bảo trong trường hợp chung bằng cách sử dụng ổ khóa (synchronized
) hoặc nguyên thủy nguyên tử. Tuy nhiên, những gì có thể gây nhầm lẫn là việc sử dụng các cơ chế đồng bộ cũng tạo ra một hàng rào bộ nhớ ngầm, vì vậy khai báo một biến dễ bay hơi nếu bạn chỉ đọc/ghi nó bên trong khối synchronized
là không cần thiết.
Tôi không đọc nhận xét trong bài đăng đó. Câu trả lời sai lầm tốt nhất đó phải được chỉnh sửa ở đó. :) Bài học kinh nghiệm: không dùng StackOverflow làm từ cuối cùng. – chrisapotek
@chrisapotek Yea, đôi khi nó không may OP là người duy nhất có thể trả lời câu hỏi đúng hoặc không chính xác. –
Áp lực công khai khiến anh chàng chuyển sang câu trả lời tốt hơn. Điều đó nói rằng, luôn luôn là một ý tưởng tốt để có câu trả lời SO trong bối cảnh thích hợp. Cảm ơn john, @chrisapotek. Có thể muốn chỉnh sửa câu hỏi của bạn để chỉ ra điều đó. – Gray