1. 程式人生 > >201711671203《Java程式設計》學習報告第11周

201711671203《Java程式設計》學習報告第11周

教材學習內容

程式是一段靜態的程式碼,是軟體執行的藍本,程序是程式一次動態執行的過程。執行緒不是程序,是比執行緒更小的執行單位,一個程序在執行過程中,可以產生多個執行緒,形成多條執行線索,每條執行緒也有它自身的產生、存在、消亡的過程。程序可以共享作業系統的資源,執行緒間也可以共享程序中的某些記憶體單元(包括程式碼與資料),並利用這些共享單位實現資料交換、實時通訊與必要的同步操作,執行緒的中斷與恢復可以節省系統的開銷。

Java的多執行緒機制    表面上執行執行緒給人一種幾個事件同時發生的感覺,但這只是一種錯覺,Java虛擬機器快速地吧控制從一個執行緒換到另一個執行緒。執行緒輪流被執行,使每個執行緒都有機會試用cpu資源。

執行緒一個完整的生命週期包括,

新建、

執行(呼叫start()方法)、

中斷(4種情況 1 JVM將cpu資源從當前執行緒切換給其他執行緒,使本執行緒讓出CPU使用權    2 執行期間執行了sleep(int millsecond)方法,是當前執行緒進入休眠,經過millsecond指定毫秒數後重新進到執行緒佇列中排隊等待CPU資源  3 執行wait()方法,等其他執行緒呼叫notify()方法通知它,它才重新進到執行緒佇列排隊CPU資源,從中斷處繼續執行   4  使用CPU資源期間,執行某個操作進入阻塞狀態,此時不能進入排隊佇列,只有當引起阻塞的原因消除時,執行緒才重新進排隊,從原來中斷處繼續執行)

死亡(執行完run()方法中全部語句;另一個原因是執行緒被提前強制地終止)死亡狀態是執行緒釋放了實體,釋放分配給執行緒物件的記憶體

 

Java虛擬機器中的執行緒排程器負責管理執行緒,執行緒優先順序分為10個級別,分別用thread類的類常量表示。每個Java執行緒優先順序在常數1和10之間即Thread.MIN_PRIORITY,如果沒有明確設定優先順序,每個執行緒的優先順序都為常數5即Thread.NORM_PRIORITY

執行緒優先順序通過setPriority(int grade)方法調整,如果該int型引數不在1~10之間,那麼該方法產生一個IllegalArgumentException異常,有些作業系統只識別三個級別:1、5、10.

因為每個執行緒都有機會獲得cpu的使用權,當執行緒使用cpu資源的時間到時後,即使執行緒沒有完成自己的全部操作,JVM也會中斷當前執行緒的執行,吧cpu使用權切換給下一個排隊的執行緒。        加入有A\B\C\D四個執行緒,A、B級別高於CD,Java排程器首先以輪流的方式執行A、B,一直到A、B都執行完,才會在C、D之間輪流切換。

不提倡使用執行緒的優先順序保證演算法的正確執行,要編寫正確、跨平臺的多執行緒程式碼,必須假設執行緒在任何時刻都有可能被剝奪CPU資源的使用權。

遇到的問題

暫無

  程式碼行數 部落格量 學習時長  
目標        
第一週 53 1 3  
186 1 5  
134 1 4  
233 1 6  
425 1 9  
202 1 5  
62 1 4  
176 1 7  
130 0 6  
十一 56/1631 1/9 8/57