1. 程式人生 > >20165234 《Java程序設計》第八周學習總結

20165234 《Java程序設計》第八周學習總結

tar 自動 相同 virtual thread 都是 包含 java虛擬機 返回

第七周學習總結

教材內容學習

第十二章 Java 多線程機制

  • 進程與線程

進程是程序的一次動態執行過程,對應了從代碼加載、執行至執行完畢的一個完整過程。

線程不是進程,是比進程更小的執行單位。

一個進程在其執行過程中,可以產生多個線程,形成多條執行線索。

  • 主線程

每個Java應用程序都有一個缺省的主線程。

當JVM(Java Virtual Machine 虛擬機)加載代碼,發現main方法之後,就會啟動一個線程,這個線程稱為“主線程”(main線程),該線程負責執行main方法。

JVM一直要等到Java應用程序中的所有線程都結束之後,才結束Java應用程序 。

main 線程主要負責執行 main 方法。在 main 方法的執行中在創建的線程,就被稱作程序中的其他線程。

JVM 就要在主線程和其他線程之間輪流切換,保證每個線程都有機會使用 CPU 資源。

  • Java 中的多線程機制

多線程是指一個應用程序中同時存在幾個執行體,按幾條不同的執行線索共同工作的情況。

  • 線程的狀態和生命周期

1. 新建: 當一個Thread類或其子類的對象被聲明並創建時,新生的線程對象處於新建狀態。

2. 運行 :線程必須調用start()方法(從父類繼承的方法)通知JVM,這樣JVM就會知道又有一個新一個線程排隊等候切換了。一旦輪到它來享用CPU資源時,此線程的就可以脫離創建它的主線程獨立開始自己的生命周期了。

3. 中斷: VM 將 CPU 資源從當前線程切換給其他線程,使本線程讓出 CPU 的使用權處於中斷狀態;線程使用 CPU 資源期間,執行了 sleep(int millsecond) 方法,使當前線程進入休眠狀;線程使用 CPU 資源期間,執行了 wait() 方法;線程使用 CPU 資源期間,執行某個操作進入阻塞狀態。

4. 死亡: 處於死亡狀態的線程不具有繼續運行的能力。線程釋放了實體。

  • Thread類與線程的創建

編寫子類時,需要重寫 run() 方法

創建線程的構造方法: Thread(Runnable target) ,參數是 Runnable 類型的接口,需向接口傳遞實例對象

  • 線程的常用方法

start() : 線程調用該方法將啟動線程,使之從新建狀態進入就緒隊列排隊,一旦輪到它來享用CPU資源時,就可以脫離創建它的線程獨立開始自己的生命周期了。

run() : Thread類的run()方法與Runnable接口中的run()方法的功能和作用相同,都用來定義線程對象被調度之後所執行的操作,都是系統自動調用而用戶程序不得引用的方法。

sleep(int millsecond) : 優先級高的線程可以在它的run()方法中調用sleep方法來使自己放棄CPU資源,休眠一段時間。

isAlive() : 線程處於“新建”狀態時,線程調用isAlive()方法返回false。在線程的run()方法結束之前,即沒有進入死亡狀態之前,線程調用isAlive()方法返回true。

currentThread() : 該方法是Thread類中的類方法,可以用類名調用,該方法返回當前正在使用CPU資源的線程。

interrupt(): 一個占有CPU資源的線程可以讓休眠的線程調用interrupt()方法“吵醒”自己,即導致休眠的線程發生InterruptedException異常,從而結束休眠,重新排隊等待CPU資源。

  • 線程同步

在處理多線程問題時,必須註意這樣一個問題:當兩個或多個線程同時訪問同一個變量,並且一個線程需要修改這個變量。程序應對這樣的問題做出處理,否則可能發生混亂。

所謂線程同步就是程序中的若幹個線程都需要使用一個 synchronized(同步)修飾的方法。

  • 協調同步的線程

wait() 方法可以中斷方法的執行,使本線程等待,暫時讓出CPU的使用權,並允許其它線程使用這個同步方法。

notifyAll() 方法通知所有的由於使用這個同步方法而處於等待的線程結束等待。曾中斷的線程就會從剛才的中斷處繼續執行這個同步方法,並遵循“先中斷先繼續”的原則。

notify() 方法只是通知處於等待中的線程的某一個結束等待。

GUI線程:當JAVA程序包含圖形用戶界面(GUI)時,JAVA虛擬機在運行應用程序時會自動啟動更多線程,其中AWT-EventQuecue線程負責處理GUI事件,AWT-Windows線程負責將窗體或組件繪制到桌面。

代碼托管

代碼提交的過程:

技術分享圖片

代碼量統計

技術分享圖片

上周考試錯題總結

技術分享圖片技術分享圖片技術分享圖片

20165234 《Java程序設計》第八周學習總結