public class TestVol {
public volatile static int i=0;
public static void main(String[] args) throws InterruptedException {
System.out.println(TestVol.i);
Thread t1=new Thread(new Task(TestVol.i));
Thread t2=new Thread(new Task(TestVol.i));
t1.start();
t2.start();
System.out.println(TestVol.i);
Thread.sleep(12000);
System.out.println(TestVol.i);
}
}
代码就是这样很简单。类里面神声明一个变量i,创建两个线程,Task任务类的工作是判断如果i==0的话,就讲i=123,但是我主方法变量i的时候,i的值还是0,并没有被线程修改啊。不是说volatile修饰的变量是都是可见的嘛?
int 不是引用传递的,线程修改的应该已经不是那个volatile 的 i 了。
===================================
先把这个输出搞清再说:https://onlinegdb.com/rJ0braKMH
输出:
虽然没有看到你的
Task
是咋写的,但是像这样只把一个 int 传进去,如果 Task 里只操作这个 int 的话,是没有办法改变你的 TaskVol.i 的。