C# suspend sleep join 區別

ForTechnology發表於2013-03-26

sleep方法是個靜態方法,由thread類來呼叫。它只能暫停當前執行緒,不能暫停其他執行緒。它接受的引數指名這個執行緒需要休眠多少時間。

suspend方法是普通方法,由物件呼叫,他不但能夠終止當前執行緒,還能夠終止其他執行緒。與 Thread.Sleep 不同,Thread.Suspend 不會使執行緒立即停止執行。公共語言執行庫必須一直等待,直到執行緒到達安全點之後它才可以將該執行緒掛起。如果執行緒尚未啟動或已經停止,則它將不能掛起。執行緒 的安全點是執行緒執行過程中可執行垃圾回收的一個點。但是它具有高度侵犯性並會導致嚴重的應用程式問題,如死鎖(例如,如果掛起的執行緒佔有另一個執行緒需要的 資源,就會發生這種情況)。某些應用程式確實需要控制執行緒的優先順序以提高效能。為了做到這一點,應該使用 Thread.Priority 而不是 Thread.Suspend

join方法是非靜態方法,他使得在系統呼叫此方法時只有這個執行緒執行完後,才能執行其他執行緒,包括主執行緒的終止!或者給它制定時間,即最多過了這麼多時間後,如果還是沒有執行完,下面的執行緒可以繼續執行而不必再理會當前執行緒是否執行完。

所以,最好不要使用suspend方法來掛起執行緒,綜合使用sleep  join  priority 都是很好的解決辦法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-757088/,如需轉載,請註明出處,否則將追究法律責任。

相關文章