1. 程式人生 > >第十周java學習總結

第十周java學習總結

virtual 繼承 使用權 jvm 聯合 截圖 類繼承 技術分享 兩個

目錄

  • 第十周java學習總結
    • 學習內容
    • 代碼上傳截圖
    • 代碼鏈接

第十周java學習總結

學習內容

第12章 Java多線程機制

  • 主要內容

Java中的線程
Thread類與線程的創建
線程的常用方法
線程同步
協調同步的線程
線程聯合
GUI線程
計時器線程

  • 重點和難點
    重點:多線程的概念;如何創建多線程
    難點:理解多線程機制

進程與線程
操作系統與進程
程序是一段靜態的代碼,它是應用軟件執行的藍本。
進程是程序的一次動態執行過程,它對應了從代碼加載、執行至執行完畢的一個完整過程,這個過程也是進程本身從產生、發展至消亡的過程。

現代操作系統可以同時管理一個計算機系統中的多個進程,即可以讓計算機系統中的多個進程輪流使用CPU資源。
線程是比進程更小的執行單位,一個進程在其執行過程中,可以產生多個線程,形成多條執行線索,每條線索,即每個線程也有它自身的產生、存在和消亡的過程。
線程間可以共享進程中的某些內存單元(包括代碼與數據),線程的中斷與恢復可以更加節省系統的開銷。

Java的多線程機制
Java語言的一大特性點就是內置對多線程的支持。
Java虛擬機快速地把控制從一個線程切換到另一個線程。這些線程將被輪流執行,使得每個線程都有機會使用CPU資源Java中的線程
主線程(main線程)
每個Java應用程序都有一個缺省的主線程。

當JVM(Java Virtual Machine 虛擬機)加載代碼,發現main方法之後,就會啟動一個線程,這個線程稱為“主線程”(main線程),該線程負責執行main方法。
JVM一直要等到Java應用程序中的所有線程都結束之後,才結束Java應用程序 。
線程的狀態與生命周期
建的線程在它的一個完整的生命周期中通常要經歷如下的四種狀態:
新建: 當一個Thread類或其子類的對象被聲明並創建時,新生的線程對象處於新建狀態。
運行 :線程必須調用start()方法(從父類繼承的方法)通知JVM,這樣JVM就會知道又有一個新一個線程排隊等候切換了。一旦輪到它來享用CPU資源時,此線程的就可以脫離創建它的主線程獨立開始自己的生命周期了。
中斷:有4種原因的中斷:
JVM將CPU資源從當前線程切換給其他線程,使本線程讓出CPU的使用權處於中斷狀態。
線程使用CPU資源期間,執行了sleep(int millsecond)方法,使當前線程進入休眠狀。
線程使用CPU資源期間,執行了wait()方法。
線程使用CPU資源期間,執行某個操作進入阻塞狀態。
死亡 :處於死亡狀態的線程不具有繼續運行的能力。線程釋放了實體。

處於就緒狀態的線程首先進入就緒隊列排隊等候CPU資源,同一時刻在就緒隊列中的線程可能有多個。Java虛擬機(JVM)中的線程調度器負責管理線程,調度器把線程的優先級分為10個級別,分別用Thread類中的類常量表示。
Java調度器的任務是使高優先級的線程能始終運行,一旦時間片有空閑,則使具有同等優先級的線程以輪流的方式順序使用時間片。
使用Thread的子類
在Java語言中,用Thread類或子類創建線程對象。
在編寫Thread類的子類時,需要重寫父類的run()方法,其目的是規定線程的具體操作,否則線程就什麽也不做,因為父類的run()方法中沒有任何操作語句。

在處理多線程問題時,我們必須註意這樣一個問題:當兩個或多個線程同時訪問同一個變量,並且一個線程需要修改這個變量。我們應對這樣的問題作出處理。
在處理線程同步時,要做的第一件事就是要把修改數據的方法用關鍵字synchronized來修飾。
所謂線程同步就是若幹個線程都需要使用一個synchronized修飾的方法。

一個線程A在占有CPU資源期間,可以讓其它線程調用join()和本線程聯合,如B.join();
稱A在運行期間聯合了B。如果線程A在占有CPU資源期間一旦聯合B線程,那麽A線程將立刻中斷執行,一直等到它聯合的線程B執行完畢,A線程再重新排隊等待CPU資源,以便恢復執行。如果A準備聯合的B線程已經結束,那麽B.join()不會產生任何效果。

當Java程序包含圖形用戶界面(GUI)時,Java虛擬機在運行應用程序時會自動啟動更多的線程,其中有兩個重要的線程:AWT-EventQuecue和AWT-Windows。AWT-EventQuecue線程負責處理GUI事件,AWT-Windows線程負責將窗體或組件繪制到桌面。JVM要保證各個線程都有使用CPU資源的機會,比如,程序中發生GUI界面事件時,JVM就會將CPU資源切換給AWT-EventQuecue線程,AWT-EventQuecue線程就會來處理這個事件,比如,你單擊了程序中的按鈕,觸發ActionEvent事件,AWT-EventQuecue線程就立刻排隊等候執行處理事件的代碼

線程是比進程更小的執行單位。一個進程在其執行過程中,可以產生多個線程。
Java虛擬機(JVM)中的線程調度器負責管理線程,在采用時間片的系統中,每個線程都有機會獲得CUP的使用權。
理解線程的創建的兩種方法。
線程同步是指幾個線程都需要調用同一個同步方法(用synchronized修飾的方法)。學會使用wait()方法和notifyAll()方法。

代碼上傳截圖

技術分享圖片

代碼鏈接

代碼托管

第十周java學習總結