【发布时间】:2019-01-13 13:41:01
【问题描述】:
在下面运行我的测试代码,似乎在线程方法仍在执行时调用它会在线程当前执行之间运行该方法。 我想知道到底发生了什么?
线程是否暂停while循环,执行方法,然后返回循环?它是在 while 代码的末尾还是中间的任何地方这样做?
或者该方法是否在另一个单独的线程中执行?或者完全是别的什么?
package test;
public class main {
public static threed thred = new threed();
public static void main(String[] args) throws InterruptedException {
thred.start();
Thread.sleep(10000);
while (true) {
System.out.println("doing it");
thred.other();
Thread.sleep(2000);
thred.x++;
}
}
}
和
package test;
public class threed extends Thread {
public int x;
public threed() {
x = 0;
}
public void run() {
while (x < 10) {
System.out.println(x);
}
}
public void other() {
System.out.println("other " + x);
}
}
【问题讨论】:
-
不是调用“线程的方法”,而是调用对象的方法。它在主线程中调用它们,而线程的
run()方法在另一个线程中运行。 -
Thread对象没有什么特别之处,只是它们知道如何在 JVM 中启动一个新线程。只要您手中有一个对象,就可以调用方法。魔术发生在 JVM 调度程序中。 -
该方法将由两个线程独立执行(如果存在/可用足够多的 CPU/内核,最终并行执行)
-
附带说明,切勿公开公共可变对象变量。接下来也许阅读
volatile和synchronized
标签: java multithreading loops while-loop