我在下面有一个简单的程序来测试volatile变量。根据我在t2运行时编写的程序,它应该选择i的值为3并且永远不应该进入while循环
但它输出 0 1 2 0 1 2 因为它是挥发性的,它不应该只打印0,1,2 ??
public class Test{
public static void main(String []args) throws InterruptedException{
TestVolatile t1 = new TestVolatile();
t1.start();
t1.join();
TestVolatile t2 = new TestVolatile();
t2.start();
}
}
class TestVolatile extends Thread{
volatile int i = 0;
public void run(){
while(i < 3){
System.out.println(i);
i++;
}
}
}
答案 0 :(得分:0)
您正在创建2个不同的TestVolatile
个对象,每个对象都有自己的变量i
,并且只能使用它。所以第一个对象递增并输出0,1,2,第二个也是如此。
你需要像这样制作i
静态
static volatile int i = 0;
答案 1 :(得分:0)
由于2个线程正在访问i变量的2个副本,因此您获得了输出。
使i变量静态 -
static volatile int i = 0;
了解更多信息 - https://www.javacodegeeks.com/2018/03/volatile-java-works-example-volatile-keyword-java.html