《極簡Java新手編程之道》14.4.2 等待線程結束

2024年2月6日 22点热度 0人点赞

等待線程結束。

等待線程結束使用join方法就是照應方法。照應方法有三個,一個是沒有參數的,一個是有參數的,裡面是一個浪類型,它是指定等待的時長,超過這個時長之後就不等了。還有這個是兩個參數的,這個是指定毫秒和納秒,第二個和第三個是類似的,就指定一個時長。

這個等待現成結束究竟是怎麼回事?我們把這個問題給大傢說透了。這個照應方法是讓一個線程當前線程處於等待狀態。什麼意思?假如現在有一個線乘a,線乘a在主線程裡去執行,線乘a調用轉位方法,就是在主線程中調用的線乘a的轉位方法,就意味著在主線程中主線程被主色,主線程被主色,等待a線程結束,主線中被主色,等待a線中結束,是這個意思。

再說一下這個問題,假設很多同學不理解這個轉方法,就假設有兩個線程有a和b,在執行a線程的時候h執行,先要想等待b線程的運行結果回來,要等待它的運行結果、查詢結果、運算結果。總而言之,a線程實際上要等待b線程運行結束之後要它的計算結果。

這個時候讓我在a中去調用b的joinbe的錐,調用b的轉方法,在a中調用b的照原方法,結果是什麼?a被主色了,a不能往下運行了,在這a線程處於主色狀態等待狀態,等待b怎麼能繼續執行?等待b執行結束,b執行結束之後a繼續執行,a線中被阻塞了,然後等待b執行完成,執行完成之後a繼續執行,就是這樣的一個過程。

所以這個照用方法要註意是誰調用誰的照用方法,這個要理解這個問題。這種等待線程結束的照用方法在什麼時候用?就是剛才說的情況,線程之間實際上會有一種依賴關系,涉及到縣城之間的通信問題,一個縣城要等待另外一個縣城運行結果,這種情況下就需要使用join方法。

比如有這個例子,在縣城一裡面改變了共享變量,在多個縣城中都去訪問它,是希望等待子線程把它返入完成之後再去讀裡面的數據,假如數據庫裡面有這個數據,多個縣城都去訪問數據庫,先不討論數據庫的同步機制,不考慮那個問題,就說一個縣城往數據庫裡插入一條數據,另外一個縣城去讀這個數據,是不是要等到第一個縣城把數據插入完成之後才去讀它,否則第二縣城去讀這個數據的時候會發現可能跟最後過一會再讀結果可能不一樣,所以這種情況下就需要進行現成的等待處理。

所以在現成一裡面做的事情是改變共享的變量,在線程裡面線程提著,改變線程,改變變量,讓它加加,然後程序主線程往下走,主線程往下走,等待子線程結束之後,改變完變量之後主線程再去讀這個變量。

為了防止出現剛才說這個問題,就是主線程運行完了但是子線程還沒有寫入完成,怎麼辦?主線程就等待子線程就是t一線程結束寫完之後再去讀它。

來看配套代碼,看到這有一個共享變量,就是一個變量而已,在子線程中寫入主線程中讀主線程在哪,就是燜煮方法,成運行,這有一個燜煮方法,燜煮方法在這啪啪啪往下運行,往下運行的時候先不看子線成的問題,先不看程序運行,程運行這都先不看,程運行的時候快結束的時候去讀變量,就想打印變量的值,把帶毛先給它幹掉,來看看運行的值,很顯然原來是一百,打出來一個一百還是一百,沒人去改變它。

而現在是在創建了一個子線程,在子線程裡去改變值,如果不加狀元先把狀元去掉,先去掉它,看一看成運性結果是什麼,註意分析結果,程運行程序主線程開始,然後。被阻塞就在這,其實沒有阻塞,這句話是沒有的。

·然後就是打印,打印出來這個微流一百,這裡面還有子線程,馬上就出來結果了,主線程還沒有運行完成之後,主線程就已經馬上運行完成了,在這主線程就已經執行,把這個值給讀取出來了,子線程還在這運行,這就說明主線程沒有等待子線程結束,一下就把這值已經讀取出來了,而子線程還在這跑,所以加上照位方法之後,在這加上照位方法,在這成語,主色等待子線中結束,子線中結束之後,打印出這個值,這個vlog值是105,這就是介紹的等待現成結束。

課程就介紹到這裡,大傢有什麼問題可以加入我的服群,詳情請見課件最後一頁。