Java中的线程执行顺序

时间:2016-07-06 21:33:08

标签: java multithreading

我怀疑在java中执行Thread的顺序。 这个例子

  public class Thr implements Runnable {
    String string = "Yes ";
    public void run(){
      this.string = "No ";
    }
    public static void main (String args[]){
      Thr t = new Thr();
      new Thread(t).start();
      for(int i = 0; i < 10; i++)
          System.out.println(t.string);
    } 
  }

给出输出:

Yes 
No 
No 
No 
No 
No 
No 
No 
No 
No 

我有这个话题 Java. The order of threads execution 我很困惑为什么在第一次通过for循环后字符串被改为no。 我认为,因为主线程没有大的工作要做,主线程将先执行,输出将是

Yes 
Yes 
Yes 
Yes 
Yes 
Yes 
Yes 
Yes 
Yes
No

当我在run方法中放入一些打印而不是this.string =&#34; No&#34;然后,从run方法打印最后打印。

2 个答案:

答案 0 :(得分:1)

我认为我弄清楚发生了什么。事实是,这个线程,主线程和新的Thread(t)都是并行执行的。它是一种乐透,因为它们都要求处理器时间,因此,当主线程开始执行时,所有需要执行的代码,主线程花费处理器时间,它只打印首先是,然后是新的线程(t)获得他的处理器时间,更改&#34;是&#34;否,并完成执行,并且主线程再次继续执行。我做了一点测试,并在

public class Thr implements Runnable {
  String string = "Yes ";
  public void run(){
    this.string = "No ";
  }
  public static void main (String args[]){
  Thr t = new Thr();
  Thread tr = new Thread(t);
  tr.start();
  for(int i = 0; i < 10; i++)
      System.out.println(t.string + tr.isAlive());
  } 
}

,输出

Yes true
No false
No false
No false
No false
No false
No false
No false
No false
No false

答案 1 :(得分:0)

当使用线程确定一件事时,即使你调用它,也无法预测线程何时启动:

new Thread(t).start();

当你调用它时,线程进入“准备开始运行或运行状态”的状态,然后线程调度程序可以获取线程并将其置于运行状态。如果他想,它有点复杂但是你无法预测当你有一堆它们会发生什么,有时如果你开始两个线程,最后一个先运行。有关该主题的更多信息,请参阅this