這次不加字首了,感覺看的都是作業系統的知識
乙個執行著的程式,通常都會有許多執行緒存在,並且等著被cpu分配資源執行,所以就需要執行緒排程機制來管理。
jvm執行緒排程有兩種方式:協作式排程、搶占式排程
當cpu分配資源給某個執行緒的時候,執行緒開始執行,執行時間由執行緒自身決定,也就是說,執行緒執行完了才會傳送通知給系統,告訴系統它執行完了。一般來說不允許被中途打斷。
優點:每乙個執行緒的方法都能被完全執行
缺點:由於沒法被中斷,一旦執行了耗時操作,很容易導致阻塞。
每乙個執行緒都有乙個優先順序,但並不是說優先順序越高,系統就會優先執行這個執行緒,只是說優先順序越高,越有希望被執行。真正執行哪個執行緒是由cpu決定的,並且是否將執行緒執行完,也是由cpu決定的。也就是說,可能這個執行緒執行到一半可能會被中斷,執行下乙個執行緒。
優點:不會產生執行緒飢餓。
缺點:頻繁切換執行緒,容易導致系統資源浪費
執行緒的生命週期有五個狀態:新建、就緒、執行、阻塞、銷毀
這個狀態代表執行緒剛被建立,但是並沒有呼叫start()方法。
當新建狀態的執行緒呼叫了start()方法之後,它就變成了就緒狀態。
在這個狀態下,假如系統分配資源給他了,那麼他就可以執行,進入執行狀態。
假如系統出現錯誤,那麼他就直接被意外終止了。
這個狀態下的執行緒得到了系統分配資源,並開始執行。
在這個狀態下,假如呼叫了sleep()、wait(),或者遇到了阻塞,就會轉變成阻塞狀態
假如呼叫了yield()方法,讓出資源,就會進入就緒狀態。或者因為時間片用完了,cpu分配時間給別的執行緒,也會進入就緒狀態。
如果呼叫了stop()方法,那麼就會進入銷毀狀態。
在這個狀態下的執行緒,需要等待外部力量的激發,才可以重新進入就緒狀態。
比如呼叫sleep()方法,休眠時間結束,就進入就緒狀態。
比如呼叫wait()方法後,其他執行緒使用了notify()或者nitifyall()方法喚醒執行緒,就會進入就緒狀態。
阻塞狀態結束後,會進入就緒狀態。
呼叫stop()方法,或者系統出現錯誤,就會直接進入銷毀狀態
這個狀態下的執行緒只能等死,它不能回到之前的任意一種狀態,是生命週期的最後終點。
死鎖就是多個程序之間相互爭奪資源,最後導致程序都無法執行。
1.互斥條件:每乙個資源要麼已經分配給乙個程序,要麼可用
2.占有和等待條件:乙個已經得到資源的程序可以請求新的資源。
3.不可搶占條件:已經被分配的資源不能被強制搶占,只能由獲取它的程序主動釋放。
4.迴圈等待條件:當發生死鎖時,所等待的程序必定會形成乙個環路,這個環路的所有程序都在等待下乙個程序所占有的資源,從而造成永久阻塞。
ps:發生死鎖代表四個條件同時滿足,所以為了避免死鎖,只需要破壞其中任意乙個條件。比如設定:當乙個程序得不到他請求的資源,就釋放自己占有的資源(破壞不可搶占條件)。
執行緒生命週期
今天看到一段這樣的 handle hthread createthread null,0,add,a,0,null hmutext createmutex null,false,l huchiti closehandle hthread 簡單的說,關閉了執行緒控制代碼 關閉了執行緒,其兩者的生命週期...
執行緒生命週期
本章目標 了解執行緒的生命週期 了解執行緒的停止操作 執行緒的生命週期 注意大部分的執行緒生命週期的方法基本上都已經學過了,那麼在這裡有以下三個新方法 suspend 方法 暫時掛起執行緒 resume 方法 恢復掛起的執行緒 stop 方法 停止執行緒 但是對於執行緒中suspend resume...
執行緒生命週期
執行緒的生命週期分為五種狀態 新建狀態 就緒狀態 執行狀態 阻塞狀態 死亡狀態 剛new出來的執行緒物件。新建狀態呼叫start 方法就進入就緒狀態。就緒狀態的執行緒又叫做可執行狀態,表示當前執行緒具有搶奪cpu時間片的權利 cpu時間片就是執行權 當乙個執行緒搶奪到cpu時間片之後就開始執行run...