1. 程式人生 > >Java Thread.join()詳解--父執行緒等待子執行緒結束後再結束

Java Thread.join()詳解--父執行緒等待子執行緒結束後再結束

一、使用方式。

join是Thread類的一個方法,啟動執行緒後直接呼叫,例如:

?
1 Thread t = new AThread(); t.start(); t.join();
回到頂部

二、為什麼要用join()方法

在很多情況下,主執行緒生成並起動了子執行緒,如果子執行緒裡要進行大量的耗時的運算,主執行緒往往將於子執行緒之前結束,但是如果主執行緒處理完其他的事務後,需要用到子執行緒的處理結果,也就是主執行緒需要等待子執行緒執行完成之後再結束,這個時候就要用到join()方法了。

回到頂部

三、join方法的作用

在JDk的API裡對於join()方法是:

回到頂部

join

public final void join() throws InterruptedException Waits for this thread to die. Throws: InterruptedException  - if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

即join()的作用是:“等待該執行緒終止”,這裡需要理解的就是該執行緒是指的主執行緒等待子執行緒的終止。也就是在子執行緒呼叫了join()方法後面的程式碼,只有等到子執行緒結束了才能執行。

回到頂部

四、用例項來理解

寫一個簡單的例子來看一下join()的用法:

1.AThread 類

  1. BThread類

  2. TestDemo 類

    ?
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 class BThread extends Thread { public BThread() { super("[BThread] Thread"); }; public void run() {

    相關推薦

    Java Thread.join()--父執等待執行結束結束

    一、使用方式。 join是Thread類的一個方法,啟動執行緒後直接呼叫,例如: ? 1 Thread t = new AThread(); t.start(); t.join();

    Java 執行池主執行等待執行awaitTermination方法使用

        Java中在使用Executors執行緒池時,有時場景需要主執行緒等各子執行緒都執行完畢後再執行。這時候就需要用到ExecutorService介面中的awaitTermination方法,我們來看看原始碼中對該方法的說明:大概意思是這樣的:該方法呼叫會被阻塞,並且在

    Java實現主執行等待執行join,CountDownLatch

    本文介紹兩種主執行緒等待子執行緒的實現方式,以5個子執行緒來說明: 1、使用Thread的join()方法,join()方法會阻塞主執行緒繼續向下執行。 2、使用Java.util.concurrent中的CountDownLatch,是一個倒數計數器。初始化時先設定

    Java執行--讓主執行等待執行執行完畢

    參考連結:https://www.cnblogs.com/eoss/p/5902939.html 使用Java多執行緒程式設計時經常遇到主執行緒需要等待子執行緒執行完成以後才能繼續執行,那麼接下來介紹一種簡單的方式使主執行緒等待。 java.util.concurrent.CountDown

    java執行等待執行執行執行

    這裡記錄一下下面這種情況:主執行緒需要等待多個子執行緒執行完後再執行。 我們先看一下下面的場景: package com.java4all.mypoint; import java.util.concurrent.CountDownLatch; /*

    Java執行池ExecutorService時讓主執行等待執行完成繼續處理

    (() -> { try { System.out.println(finalI + " 我執行了。。。"); Thread.sleep(5000L);

    java執行池主執行等待執行執行完成

    Java如何等待子執行緒執行結束 今天討論一個入門級的話題, 不然沒東西更新對不起空間和域名~~ 工作總往往會遇到非同步去執行某段邏輯, 然後先處理其他事情, 處理完後再把那段邏輯的處理結果進行彙總的產景, 這時候就需要使用執行緒了. 一個執行緒啟動之後, 是非同

    java執行等待執行結束

    第一種方式join/** * Date:2016年9月7日下午7:43:13 * Copyright (c) 2016, www.bwbroad.com All Rights Reserved. * */ package test.join; import tes

    執行-join方法(主執行等待執行執行完畢)

    多執行緒中的join方法 join主要的作用就是讓主執行緒 等待 子執行緒 執行完畢之後,才讓主執行緒繼續執行。 話不多說,直接看程式碼例子就好。 父執行緒 package com.luoy.Thread.join; public class Fa

    python中主執行等待執行完成的實現(join())

    有時候遇到多程程處理的場景,主執行緒要等待子執行緒完成資料解析,然後主執行緒才利用子執行緒的資料做下一步操作,那麼python的實現方式是在主執行緒中呼叫子執行緒的join方法,這樣主執行緒在子執

    效能優化-多執行-主執行等待執行完成場景

    專案 出行專案 需求 今日訂單查詢優化 場景描述 根據時間查詢出今日訂單,根據訂單去mongo查詢出規矩點,根據軌跡點去呼叫高德的地理/逆地理編碼介面(https://lbs.amap.com/api/webservice/guide/api/georegeo

    執行等待執行結束

    在很多時候,我們期望實現這麼一種功能:在主執行緒中啟動一些子執行緒,等待所有子執行緒執行結束後,主執行緒再繼續執行。比如:老闆分配任務,眾多工人開始工作,等所有工人完成工作後,老闆進行檢查。 解決方法分析: 主執行緒通過join等待所有子執行緒完成後,繼續執行;主執行緒知道

    關於使用CyclicBarrier使主執行等待執行執行完之後向下執行的問題

    "pool-1-thread-2" prio=6 tid=0x00000000067f7800 nid=0x1534 at breakpoint[0x000000000876f000]    java.lang.Thread.State: RUNNABLE at com.iteye.wwwcomy.thre

    [java] Thread

      目錄 Thread類概述 成員變數 構造方法 start方法 run方法 Thread直接呼叫run()和start()方法的區別 sleep方法 yield方法 interrupt方法 join方法 getState方法 總結

    Tomcat 的連線數與執行

    前言 在使用tomcat時,經常會遇到連線數、執行緒數之類的配置問題,要真正理解這些概念,必須先了解Tomcat的聯結器(Connector)。 在前面的文章 詳解Tomcat配置檔案server.xml 中寫到過:Connector的主要功能,是接收連線請求,建立R

    tomcat的連線數與執行

    前言 在使用tomcat時,經常會遇到連線數、執行緒數之類的配置問題,要真正理解這些概念,必須先了解Tomcat的聯結器(Connector)。 在前面的文章 詳解Tomcat配置檔案server.xml 中寫到過:Connector的主要功能,是接收連線請求,建立Request和Response物件用於和請

    C# 多執行 Part.02(UI 執行執行的互動、ProgressBar 的非同步呼叫)

           我們先來看一段執行時會丟擲 InvalidOperationException 異常的程式碼段: private void btnThreadA_Click(object sender, EventArgs e) { Thread thread

    Java——設定執行等待執行喚醒

    //執行緒間的通訊:執行緒的任務不同,但是執行緒操作的資料相同 /* wait(),notify(),notifyAll()必須用在同步中,因為同步中才有鎖 指明讓持有哪個鎖的執行緒去等待或被喚醒 */ //還是上次的例子,實現存一個輸出一個,而不是輸出一大堆

    java 如何實現等待執行結束

    工作中往往會遇到非同步去執行某段邏輯, 然後先處理其他事情, 處理完後再把那段邏輯的處理結果進行彙總的產景, 這時候就需要使用執行緒了。 一個執行緒啟動之後, 是非同步的去執行需要執行的內容的, 不會影響主執行緒的流程,  往往需要讓主執行緒指定後, 等待子執行緒的完成. 這裡有幾種方式. 站在 主執行緒的

    執行執行資訊pool-1-thread-1

    11-02 05:19:00.989 912 931 I am_anr : [0,31740,com.android.vending,952811205,Broadcast of Intent { act=android.intent.action.PACKAG