sleep()
,yield()
,join()
,wait()
sleep()
sleep是Thread
類的靜態方法,在指定的時間內讓當前線程暫停執行,但不會釋放鎖標誌函數
也就是使線程進入阻塞狀態
線程
wait()
Object類的方法,在其餘的線程調用notify()/notifyAll()
以前,當前線程保持 等待,會釋放鎖標誌,其餘線程能夠在當前線程wait期間搶佔鎖。讓線程進入等待(阻塞)狀態code
wait與notify必須在synchronized函數中或者synchronized代碼塊中使用,其餘地方的使用雖然編譯不會出錯,可是會拋出異常。資源
yield()
yield只是讓當前的線程‘放棄cpu資源,可是放棄的時間不肯定,有可能放棄以後又得到了cpu資源。也就是,讓線程再次進入可執行狀態,yield只能使得同優先級或者優先級更高的線程得到執行的可能
yield不會釋放鎖同步
join()
在通常狀況下,每每主線程會先於其餘線程執行結束。可是有時候主線程須要等待其餘線程的執行結果,這時候就能夠使用join()
方法來讓主線程暫停執行,先執行其餘線程,直到其餘線程執行完畢,主線程纔會接着執行。it
也就是使得主線程阻塞,讓調用join()
的線程先執行。還有一個join(long waitTime)
,能夠使當前線程只阻塞 wait time 毫秒的時間。當調用join()
方法的線程被中斷的時候,程序會拋出異常編譯
join(long time)
的內部實現是使用的wait(long time)
實現的,因此,在同步的代碼中,會釋放鎖。yield