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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public
class
VolatileExample
{
private
volatile
static
int
COUNT
=
0
;
public
static
void
main
(
String
[
]
args
)
{
new
ChangeListener
(
)
.
start
(
)
;
new
ChangeMaker
(
)
.
start
(
)
;
}
static
class
ChangeListener
extends
Thread
{
@Override
public
void
run
(
)
{
int
value
=
COUNT
;
// Khi giá trị của biến COUNT nhỏ hơn 5, thread này sẽ lặp mãi mãi để kiểm tra giá trị của biến này
while
(
value
<
5
)
{
if
(
value
!
=
COUNT
)
{
System
.
out
.
println
(
“Count variable changed to : “
+
COUNT
)
;
value
=
COUNT
;
}
}
}
}
static
class
ChangeMaker
extends
Thread
{
@Override
public
void
run
(
)
{
int
value
=
COUNT
;
while
(
COUNT
<
5
)
{
System
.
out
.
println
(
“Increasing value of count variable to “
+
(
value
+
1
)
)
;
COUNT
=
++
value
;
try
{
Thread
.
sleep
(
500
)
;
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
(
)
;
}
}
}
}
}
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ả:
1
2
3
4
5
6
7
8
9
10
Increasing
value
of
count
variable
to
1
Count
variable
changed
to
:
1
Increasing
value
of
count
variable
to
2
Count
variable
changed
to
:
2
Increasing
value
of
count
variable
to
3
Count
variable
changed
to
:
3
Increasing
value
of
count
variable
to
4
Count
variable
changed
to
:
4
Increasing
value
of
count
variable
to
5
Count
variable
changed
to
:
5
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:
1
2
3
4
5
6
Increasing
value
of
count
variable
to
1
Count
variable
changed
to
:
1
Increasing
value
of
count
variable
to
2
Increasing
value
of
count
variable
to
3
Increasing
value
of
count
variable
to
4
Increasing
value
of
count
variable
to
5
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)