join方法解釋:方法x.join()的作用是使所屬線程x 正常執行run()中的方法,而使得調用x.join()的線程處於無限期阻塞狀態,等待x線程銷毀后再繼續執行線程z后面的代碼。
1、方法join的主要作用就是同步,它可以使得線程之間的並行執行變為串行執行。在A線程中調用了B線程的join()方法時,
表示只有當B線程執行完畢時,A線程才能繼續執行。
2、方法join(long)是設定等待的時間。實際join()方法中調用的是join(0),當參數是0的時候表示無限期等待。
3、方法join(long)的功能在內部是使用wait(long)來實現的,所以join(long)方法具有釋放鎖的特點。
4、方法join在內部調用wait()方法進行等待,而synchronized關鍵字使用的是"對象監視器"原理作為同步。
5、在join()過程中,如果當前線程被中斷,則當前線程出現異常。(注意是調用thread.join()的線程被中斷才會進入異常,比如a線程調用b.join(),a中斷會報異常而b中斷不會異常)
sleep和wait的區別:
1、這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object類。
2、sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。
3、使用范圍:wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用 。
4、sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常