首先调用哪个类run()方法?为什么?

Kav*_*nna -2 java multithreading

我使用线程概念尝试了以下代码.在这段代码中,我在两个不同的类中声明了两个run方法.我从我的main方法中调用了这些方法.其实我想知道的是,首先调用哪个run()方法?当我一次又一次地跑步时,我得到了相同代码的不同输出.

我的代码:

class parent
{
    public synchronized void display1()
    {
        System.out.println("Dispaly_1 is invoked");
    }
    public synchronized void display2()
    {
        System.out.println("Dispaly_2 is invoked");
    }
}
class abc extends Thread{
    parent p;
    public abc(parent p){
        this.p = p;
    }

    public void run(){
        System.out.println("abc start...");     
        p.display1();
    }
}
class xyz extends Thread{
    parent p;
    public xyz(parent p){
        this.p = p;
    }

    public void run(){
        System.out.println("xyz start...");     
        p.display2();
    }
}

public class ThreadExample {

    public static void main(String[] args) {

        parent p=new parent();
        abc ob=new abc(p);
        xyz ob1=new xyz(p);
        ob.start();
        ob1.start();

    }

}
Run Code Online (Sandbox Code Playgroud)

输出:第一次

abc start...
xyz start...
Dispaly_2 is invoked
Dispaly_1 is invoked
Run Code Online (Sandbox Code Playgroud)

第二次

xyz start...
Dispaly_2 is invoked
abc start...
Dispaly_1 is invoked
Run Code Online (Sandbox Code Playgroud)

第3次

abc start...
Dispaly_1 is invoked
xyz start...
Dispaly_2 is invoked
Run Code Online (Sandbox Code Playgroud)

我对此输出感到困惑,任何人都可以解释这个代码的结果.你的帮助会很感激.谢谢

use*_*421 5

首先调用哪个类run()方法?

无论是.

为什么?

这是不确定的.直到线程调度程序.

如果要进行顺序执行,请不要使用线程.