【发布时间】:2021-05-15 16:16:37
【问题描述】:
在这种情况下,int a 是否应该是 volatile 以保证线程之间的可见性?
private volatile static int a = 0;
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
a = 10;
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(a);
}
});
t1.start();
t2.start();
}
输出
10
【问题讨论】:
-
1) 你知道哪个线程先启动吗? (提示:你不知道)2)
volatile大约是两个实体 - 当一些写入被其他线程看到时,这意味着happens-before已建立...... -
您能否进一步解释一下“之前发生”?如果在这种情况下需要 volatile 关键字,您并没有真正回答。
-
问题是这个级别很难知道基础知识并正确应用它。但在这种情况下,制作一个 volatile 就可以解决问题(正如 Eugene 已经指出的那样,它建立了发生之前的关系)。
标签: java multithreading volatile