join 插隊
所謂的join是,當所有執行緒都在同時執行的時候,某個執行緒使用join占用cpu的資源,其它執行緒就休息,待它執行完畢,讓出cpu資源,其它執行緒再繼續執行。
1
2
3
4
5
6
7
8
9
10
11
12
13
class R3 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " i = " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
以下有main執行緒與執行緒1,當main執行緒執行到i == 5,把CPU讓出來給執行緒1,等到執行緒1執行完,main再繼續執行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Test4 {
public static void main(String[] args) throws InterruptedException {
R3 r3 = new R3();
Thread t1 = new Thread(r3);
t1.setName("執行緒1");
// 啟動
t1.start();
for (int i = 0; i < 10; i++) {
if (i == 5) {
// 讓執行緒1插隊先執行,main執行緒休息
t1.join();
// 執行緒1執行完,main執行緒再接著執行
}
System.out.println(Thread.currentThread().getName() + " i = " + i);
Thread.sleep(1000);
}
}
}
main i = 0
執行緒1 i = 0
main i = 1
執行緒1 i = 1
main i = 2
執行緒1 i = 2
執行緒1 i = 3
main i = 3
main i = 4
執行緒1 i = 4
執行緒1 i = 5
執行緒1 i = 6
執行緒1 i = 7
執行緒1 i = 8
執行緒1 i = 9
main i = 5
main i = 6
main i = 7
main i = 8
main i = 9
從執行結果可以發現,一開始都是同時執行的,到了main i = 4之後,main執行緒暫停,輪到執行緒1執行完,main執行緒才繼續執行。