如何访问 class(implements Runnable) 字段

How to access class(implements Runnable) field

我想通过输入值控制线程。

如果输入值为 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 不会改变 Thread t 的值。 所以,即使输入 1,也没有任何反应。 但是 t.flag 是不可能的。对象 t 没有变量标志。

如何访问t.r.flag ....你能看懂吗?

我认为现在有很多事情让很多人傻了。

我走错方向了吗?

简答:

public boolean flag = true;更改为public volatile boolean flag = true;

JVM 通过缓存 flag 的值优化了代码,因为 'obvious' 它会被更改。