-4
這裏我的代碼是thread.start():當我們調用哪個線程調用第一
public class Child extends Thread {
public void run(){
synchronized (this)
{
for(int i=1;i<=5;i++)
{
System.out.println("child thread");
}
}
}
}
class ThreadTest{
public static void main(String []a) {
Child child=new Child();
**child.start();**
synchronized (child)
{
for(int i=1;i<=5;i++)
{
System.out.println("parent thread");
}
}
}
}
它首先打印出「父線程」後,它打印的「子線程」,但我的疑問是,當我們調用start()方法有機會在主線程之前調用子線程。但它總是在「子線程」之後打印「父線程」。任何人都可以解釋嗎?
發生這種情況的原因是'synchronized(child)'在'Child#run()'的'synchronized(this)'之前輸入。沒有保證。 –
在這種情況下,由調度程序決定是否立即安排新創建的線程。對於其他任何結果都沒有保證,即使它是兩者的混合體。如果你想執行一個命令,你需要像'CountDownLatch'這樣的東西。 – biziclop
@SashaSalauyou你的編輯評論是非常令人失望的。 – Tom