有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法理解线程可运行接口的工作原理

public class Test {
    private static void funct(final int i) {
        new Thread(new Runnable() {
            public void run() {System.out.println(i);}
         }).start(); 
    }
    public static void main(String[] args) {
        System.out.println(1);
        funct (2);
        System.out.println(3);
        funct (4);
        System.out.println(5);
    }
}

每次运行它时,我都会得到以下解决方案之一。为什么会这样? 1. 3. 5. 4. 二,

一, 3. 5. 2. 四,

一, 3. 2. 5. 四,


共 (4) 个答案

  1. # 1 楼答案

    因为你的主线程有时会打败另外两个线程。其他时候不是

    你有三条线;无法保证哪一个将按任何特定顺序运行

  2. # 2 楼答案

    在本例中,数字的打印顺序是不确定的。您唯一可以确定的是,1、3和5将按该顺序出现。但在这一安排中,第2和第4条将从何而来尚不得而知。原因是您有3个线程打印出以下数字系列:(1、3、5);(2) ,及(4)。这三个线程将由JVM调度,但JVM认为这是最好的

    多线程编程是一个复杂的主题,由于您似乎刚刚开始深入研究它,我建议您阅读Oracle Java教程中的并发部分:http://download.oracle.com/javase/tutorial/essential/concurrency/index.html

  3. # 3 楼答案

    这是因为您无法控制首先生成哪个线程。这是由JVM决定的。只有“1,3,5”是有序的,因为它们是从main执行的

    这个问题可能与以下事项有关:

    1. Run java thread at specific times
  4. # 4 楼答案

    线程和异步性通常是复杂的主题,但其不足之处在于,在您的情况下,线程需要一些时间来加速,因此它们与其他打印语句交错,这取决于JVM(以及操作系统)决定分配给这些线程的处理器时间的类型

    如果你想对正在发生的事情有一个真正可靠的把握,我强烈推荐布赖恩·戈茨和其他人写的那本书