Nói về biến volatile trong Java

Biến volatile trong Java có tác dụng thông báo sự thay đổi giá trị của biến tới các thread khác nhau nếu biến này đang được sử dụng trong nhiều thread.

Để các bạn có thể hiểu rõ hơn, mình đã làm một ví dụ như sau:

Trong ví dụ này, mình có hai thread đang sử dụng giá trị của biến COUNT, thread thứ nhất (ChangeMaker) có tác dụng thay đối giá trị của biến COUNT, còn thread thứ hai (ChangeListener) sẽ lắng nghe sự thay đổi đó. Biến COUNT sẽ được khai báo là biến volatile để có thể thông báo được sự thay đổi của nó tới thread ChangeListener.
Kết quả:

Như các bạn thấy, mỗi khi giá trị của biến COUNT thay đổi thì thread ChangeListener sẽ cập nhập sự thay đổi đó liền.

Nếu bây giờ mình bỏ khai báo biến COUNT là biến volatile đi, thì kết quả sẽ như sau:

Rõ ràng, thread ChangeListener sẽ không thể cập nhập sự thay đổi giá trị của biến COUNT nữa, và do đó chương trình của chúng ta sẽ chạy mãi mãi.

4.6/5 - (9 bình chọn)

14 thoughts on “Nói về biến volatile trong Java

  1. Cảm ơn bạn, chỉ có điều giải thích chưa được rõ lắm. Nếu trường hợp mình bỏ static đi và sử dụng thì nó hoạt động bình thường nhé. Ở đây khi mình để static variable mà sử dụng chung cho nhiều Threads. Thì các thread sẽ update giá trị cũ của biến. Do đo volatile là cần thiết cho trường hợp này

  2. Chào bạn Khanh Nguyễn, bài viết hay bạn có thể nào làm một bài viết về Design Pattern chẳng hạn như singleton. Mình đọc hoài vẫn chưa hiểu lắm. Thanks bạn nha 😀

Add Comment