Volatile boolean khác gì so với AtomicBoolean?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
1. Volatile: là một dạng biến thông báo, nghĩa là nó được dùng để các thread thông báo cho nhau rằng biến có sự thay đổi giá trị, tuy nhiên nó không đảm bảo được là giá trị của biến sẽ được đồng bộ
Ví dụ thông báo:
Nếu bạn bỏ từ khoá
volatile
thì hàmSystem.out.println("application started");
sẽ không bao giờ được in raVí dụ không đảm bảo đồng bộ giá trị:
nó sẽ in ra ngẫu nhiên, có thể là
979638
2. AtomicBoolean: vừa có khả năng thông báo vừa đảm bảo giá trị sẽ được đồng bộ, vì bên trong nó sử dụng
private volatile int value;
, nên trong ví dụ trên, bạn cũng có thể sử dụng thế này:Ví dụ thông báo:
Ví dụ đông bộ dữ liệu:
nó sẽ in ra
1000000
Nó có thể thay thế trong mọi trường hợp em ạ, tuy nhiên là nó sẽ tốn memory hơn vì nó là con trỏ, mình không nên lạm dụng, mình dùng đúng ngữ cảnh em ạ
1. Dùng volatile khi em chỉ cần quan tâm đến việc thông báo giữa các thread mà ko quan tâm đến tính chính xác của dữ liệu, ví dụ như trường hợp vòng while loop, em chỉ quan tâm là nếu có thằng nào đó set giá trị active về false là em sẽ break loop và kết thúc, như vậy thì volatile là hợp lý em ạ
2. Các trường hợp còn lại dùng atomic em ạ
Vậy thằng AtomicBoolean có thay thế được volatile boolean trong mọi trường hợp không anh? Hay performance nó bị kém hơn ạ?
Vậy em kết luận như này đúng không anh:
– Dùng volatile boolean khi chỉ có 1 thread write, có thể nhiều threads read
– Dùng AtomicBoolean khi có nhiều threads write