`sleep()`,`yield()`,`join()`,`wait()`

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

相關文章
相關標籤/搜索