[英]Threads and confusion about the order of execution
我只是無法理解程序執行的順序。
public class sub {
public static void main(String args[])
{
base b1 = new base();
b1.s="b1";
b1.start();
base b2 = new base();
b2.s="b2 ";
b2.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class base extends Thread{
String s;
@Override
public void run() {
for(int i=0;i<5;i++)
{
System.out.println(s+" "+i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// TODO Auto-generated method stub
}
}
輸出是
b2 0
b1 0
b2 1
b1 1
b2 2
b1 2
b1 3
b2 3
b2 4
b1 4
任何人都可以解釋為什么輸出是按這個順序排列的。 為什么第一個 b2 在 b1 之前執行而不是 b1 在 b2 之前執行。 那么為什么 b1 首先執行。
不能保證選擇一個線程在另一個線程之前運行。 在這種情況下,可能發生的情況是調度程序試圖避免上下文切換,因此它將嘗試保持主線程運行。 啟動新線程也需要時間。 也許到主線程進入睡眠狀態時 b1 和 b2 都啟動了,哪個先開始運行,哪個被選擇獲取 stdout 打印流上的鎖,此時都是任意選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.