同时启动具有无限循环的两个线程

时间:2016-03-27 17:48:16

标签: java multithreading

假设我有以下代码片段:

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();

现在我的问题是,由于这两个线程都运行无限循环,它们是否会同时开始运行?

3 个答案:

答案 0 :(得分:3)

它取决于JVM线程调度程序,运行代码的机器类型(单核或多核)和操作系统,当您第一次在新线程上调用start()方法时,它只是从new移动到Runnable状态。

作为JVM一部分的线程调度程序决定在任何给定时刻应该运行哪个线程,并且还使线程脱离运行状态。调度程序可以选择处于可运行状态的任何线程。

答案 1 :(得分:0)

在相同或不同的系统上,在不同的时间执行相同的代码可能会生成不同的输出。线程执行的确切时间取决于底层线程调度程序如何调度线程的执行。由于线程调度特定于特定JVM并且依赖于许多参数,因此同一系统可能会更改线程的处理顺序。

答案 2 :(得分:0)

如果您的计算机只有一个核心: 一次只能运行一个线程。因此,一个将在另一个

之前开始

如果您的计算机有多个核心: 两个线程可以同时运行(每个核心上有一个线程)。因此他们可以同时开始,但没有保证

在任何一种情况下,它都不依赖于线程是否正在运行无限循环。