join 方法的原始碼分析

2022-01-30 06:05:42 字數 1223 閱讀 5456

/*

和主線程競爭 */

public

class

test04

catch

(interruptedexception e)

synchronized (test04.class

) }

}).start();

while(ticket>0)

catch

(interruptedexception e)

synchronized (test04.class

) }}}

這個是沒有使用join方法,正常競爭。

使用thread.join()

我們需要注意的時,在我們呼叫thread.join(0方法時,此時已經切換到主線程了,並不是在子執行緒中執行,在子執行緒中執行的只有run()方法

如果簡單理解,那麼就是在主線程中呼叫了thread.join(0方法,這個方法有乙個判斷:如果當前執行緒(這裡指的是例項物件,就是synchronized表示的this物件thread)存活,那麼join()方法,也就是在主線程中呼叫的join()方法會呼叫thread.wait()方法進入阻塞狀態,導致主線程也會進入阻塞狀態

如下圖:子執行緒thread.wait()並不會影響子執行緒的執行,但是卻會導致自身方法進入阻塞,直到子執行緒結束,才會跳出while迴圈,執行主線程,同理我們在其他執行緒中呼叫某個執行緒的thread.join()方法也會導致自身執行緒進入阻塞

hashmap put 方法 原始碼分析

public v put k key,v value 如果key null 執行nullkey 操作 if key null return putfornullkey value 通過key 計算 hash值 int hash sun.misc.hashing.singlewordwangjenki...

ArrayList關鍵方法原始碼分析

概述 arraylist是乙個動態陣列,陣列大小可變,它實現了list介面,並且實現了list中所有對元素操作的方法。arraylist刪除元素時間複雜度為o n 其他方法如isempty get size 時間複雜度都為o 1 arraylist底層實現是陣列,每乙個arraylist例項都有乙個...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...