如何访问类(可运行的实现)字段

时间:2018-11-03 19:19:25

标签: java multithreading runnable

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

如果输入值为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...。您能理解吗?

我认为现在有很多傻瓜。

我走错了方向吗?

1 个答案:

答案 0 :(得分:0)

简短回答:

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

JVM通过缓存flag的值来优化代码,因为它“很明显”会被更改。