我试图通过以下示例了解易失性用法.我希望它先打印10秒然后再打印15秒.但大部分时间我都会得到10和10.下面的代码本身就是一些东西.
class T implements Runnable {
private volatile int x = 10;
@Override
public void run() {
if(x==10) {
System.out.println(x);
x = x+ 5;
} else if(x==15) {
System.out.println(x);
}
}
}
public class Prep {
public static void main(String [] args) {
T t1 = new T();
new Thread(t1).start();
new Thread(t1).start();
}
}
Run Code Online (Sandbox Code Playgroud)
你只是有一个竞争条件:两个线程并行运行,因此你有(例如)
x在这里是不稳定的这一事实是无关紧要的.在此示例中,volatile唯一保证的是,如果线程1在线程2读取其值时已经递增x,则线程2将看到递增的值.但这并不意味着两个线程不能并行运行,如上所示.
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |