【发布时间】:2016-07-06 21:33:07
【问题描述】:
我对 java 中的线程执行顺序有疑问。 这个例子
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 方法中放置一些 print 而不是 this.string = "No" 然后,从 run 方法打印最后打印。
【问题讨论】:
-
是的,但是我认为,由于主线程没有太多工作,所以会执行第一个for循环,然后执行new Thread(t).start(); ,所以它会是,最后,不是
-
但是当我把,例如,在运行 System.out.println("Thread") 和 main System.out.println("Main") 的 for 循环中,程序打印字符串 Thread最后
-
线程彼此独立运行。没有明确的顺序,它很可能会发生你所期望的。但是,如果您依赖它,那纯属运气。
-
在竞争问题(指令执行的相对顺序)之上,此代码表现出可见性问题(何时写入
string变量对主线程可见)。所以,是的,真的任何事情都可能发生在这里。
标签: java multithreading