我怀疑在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方法打印最后打印。
答案 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