我想通过输入值控制线程。
如果输入值为1,则执行某些操作。
没什么。
class Main {
class test implements Runnable{
public boolean flag = true;
public int val = 0;
@Override
public void run(){
while(true){
if(flag == true){
pt();
}
}
}
public void pt(){
System.out.println(val++);
flag = false;
}
}
public static void main(String[] args) {
Main m = new Main();
test r = m.new test();
Thread t = new Thread(r);
t.start();
Scanner reader = new Scanner(System.in);
while(true){
int n = reader.nextInt();
if(n==1){
r.flag = true;
// t.flag = true;
}
else{
r.flag = false;
// t.flag = false;
}
}
}
}
这是我的代码。
显然, 我知道r.flag不会更改线程t的值。 因此,即使键入1,也不会发生任何事情。 但是t.flag是不可能的。对象t没有变量标志。
如何访问t.r.flag...。您能理解吗?
我认为现在有很多傻瓜。
我走错了方向吗?
答案 0 :(得分:0)
简短回答:
将public boolean flag = true;
更改为public volatile boolean flag = true;
JVM通过缓存flag的值来优化代码,因为它“很明显”会被更改。