假设我有以下代码片段:
Thread x = new Thread() {
public void run() {
while (true) {
// do something
}
}
};
Thread y = new Thread() {
public void run() {
while (true) {
// do something
}
}
};
x.start();
y.start();
现在我的问题是,由于这两个线程都运行无限循环,它们是否会同时开始运行?
答案 0 :(得分:3)
它取决于JVM线程调度程序,运行代码的机器类型(单核或多核)和操作系统,当您第一次在新线程上调用start()方法时,它只是从new移动到Runnable状态。
作为JVM一部分的线程调度程序决定在任何给定时刻应该运行哪个线程,并且还使线程脱离运行状态。调度程序可以选择处于可运行状态的任何线程。
答案 1 :(得分:0)
在相同或不同的系统上,在不同的时间执行相同的代码可能会生成不同的输出。线程执行的确切时间取决于底层线程调度程序如何调度线程的执行。由于线程调度特定于特定JVM并且依赖于许多参数,因此同一系统可能会更改线程的处理顺序。
答案 2 :(得分:0)
如果您的计算机只有一个核心: 一次只能运行一个线程。因此,一个将在另一个
之前开始如果您的计算机有多个核心: 两个线程可以同时运行(每个核心上有一个线程)。因此他们可以同时开始,但没有保证
在任何一种情况下,它都不依赖于线程是否正在运行无限循环。