執行緒間通訊_等待/通知之Thread.join()
Thread.join
原始碼:
public final synchronized void join(long millis)
throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}
從原始碼可以看出,只要執行緒是alive的,就一直呼叫wait方法,直到執行緒終止。也就是如果在一個執行緒中,啟動了另一個執行緒,並呼叫該執行緒的wait方法,那麼當前執行緒就會阻塞,知道另一個執行緒執行完畢,才去向下執行.
簡單表示:
Thread1{
run{
thread2.start();
thread2.join();
System.out.print("上面執行緒執行完畢,我才繼續執行,沒有執行完,我就阻塞")
}
}
程式碼驗證:
package com.ftf.thread.test;
public class ThreadJoinDemo {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(new Runnable() {
public void run() {
System.out.println("執行緒0執行...end...");
}
});
t.start();
for (int i = 0; i < 10; i++) {
JoinThread jt = new JoinThread(t, i);
jt.start();
t = jt;
}
}
}
class JoinThread extends Thread {
private Thread t;
private int i;
public JoinThread(Thread t, int i) {
this.t = t;
this.i = i;
}
@Override
public void run() {
try {
t.join();
System.out.println("執行緒" + (i + 1) + "執行....end...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
列印結果:
執行緒0執行...end...
執行緒1執行....end...
執行緒2執行....end...
執行緒3執行....end...
執行緒4執行....end...
執行緒5執行....end...
執行緒6執行....end...
執行緒7執行....end...
執行緒8執行....end...
執行緒9執行....end...
執行緒10執行....end...
相關文章
- 執行緒間通訊_等待/通知機制執行緒
- Java 執行緒間通訊 —— 等待 / 通知機制Java執行緒
- Java併發程式設計(04):執行緒間通訊,等待/通知機制Java程式設計執行緒
- 多執行緒之等待通知機制執行緒
- 多執行緒之間通訊及執行緒池執行緒
- JUC之執行緒間的通訊執行緒
- 多執行緒之間的通訊執行緒
- iOS GCD執行緒之間的通訊iOSGC執行緒
- 執行緒4--執行緒間通訊執行緒
- Java多執行緒/併發07、Thread.Join()讓呼叫執行緒等待子執行緒Java執行緒thread
- 執行緒間的通訊執行緒
- JUC之執行緒間定製化通訊執行緒
- Android開發之執行緒間通訊Android執行緒
- Java之執行緒通訊Java執行緒
- Android執行緒間通訊Android執行緒
- java多執行緒5:執行緒間的通訊Java執行緒
- 說說Java執行緒間通訊Java執行緒
- java多執行緒間的通訊Java執行緒
- 大話Android多執行緒(三) 執行緒間的通訊機制之HandlerAndroid執行緒
- 程式通訊 執行緒通訊執行緒
- Java-執行緒間通訊小結Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- 程式和執行緒有什麼區別?(Process and Threads)程式之間和執行緒之間是如何通訊的?執行緒thread
- Java併發程式設計之執行緒安全、執行緒通訊Java程式設計執行緒
- Java執行緒通訊Java執行緒
- Thread.join()方法實現main()方法等待所有子執行緒執行完成[base jdk8]threadAI執行緒JDK
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- 【Java】【多執行緒】兩個執行緒間的通訊、wait、notify、notifyAllJava執行緒AI
- 徹底明白Java的多執行緒-執行緒間的通訊(2)(轉)Java執行緒
- 徹底明白Java的多執行緒-執行緒間的通訊(1)(轉)Java執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Linux程式執行緒學習筆記:程式間通訊 之 管道Linux執行緒筆記
- Java中快如閃電的執行緒間通訊Java執行緒
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- Android小知識-Java多執行緒相關(執行緒間通訊)上篇AndroidJava執行緒
- Java多執行緒學習(五)執行緒間通訊知識點補充Java執行緒
- android程式與執行緒詳解四:執行緒安全和程式間通訊Android執行緒
- libuv執行緒通訊執行緒