我已經嘗試了使用線程概念的以下代碼,在此代碼中,我已經在兩個不同的類中聲明瞭兩個運行方法。我從我的主要方法中調用了這些方法。 其實我想知道的是,首先調用哪個run()方法? 當我一次又一次地跑步時,我得到了相同代碼的不同輸出。首先調用哪個類的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();
}
}
輸出: 第1次
abc start...
xyz start...
Dispaly_2 is invoked
Dispaly_1 is invoked
第二次
xyz start...
Dispaly_2 is invoked
abc start...
Dispaly_1 is invoked
第三次
abc start...
Dispaly_1 is invoked
xyz start...
Dispaly_2 is invoked
我對這個輸出感到困惑,任何人都可以解釋這個代碼的結果。 你的幫助將會升值。 謝謝
線程異步運行,它們相互間的精確排序是不可預知的。就是那樣子。 – markspace