我使用线程概念尝试了以下代码。在这段代码中,我在两个不同的类中声明了两个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();
}
}
输出: 第一次
abc start...
xyz start...
Dispaly_2 is invoked
Dispaly_1 is invoked
第二次
xyz start...
Dispaly_2 is invoked
abc start...
Dispaly_1 is invoked
第3次
abc start...
Dispaly_1 is invoked
xyz start...
Dispaly_2 is invoked
我对此输出感到困惑,任何人都可以解释这个代码的结果。 你的帮助会很感激。 感谢
答案 0 :(得分:5)
首先调用哪个类run()方法?
要么。
为什么?
这是不确定的。直到线程调度程序。
如果您想要顺序执行,请不要使用线程。
答案 1 :(得分:1)
一切都取决于调度程序,调度程序可以独立管理一个线程。如果先启动abc线程,xyz可能先由调度程序执行,反之亦然。
首先启动的线程不会一直执行。
希望我的回答能够清楚地说明调度程序。