1. 程式人生 > >20175234 2018-2019-2 《Java程序設計》第十周學習總結

20175234 2018-2019-2 《Java程序設計》第十周學習總結

情況 進度條 進程 學習內容總結 interrupt item wait 周期 錯題

目錄

  • 20175234 2018-2019-2 《Java程序設計》第十周學習總結
    • 教材學習內容總結
      • 12.1進程與線程
      • 12.2 Java中的線程
      • 12.3 Thread類與線程的創建
      • 12.4 線程的常用方法
      • 12.5 線程同步
      • 12.6 協調同步的線程
      • 12.7 線程聯合
      • 12.8 GUI線程
      • 12.9 計時器線程
      • 12.10守護線程
    • 教材學習中的問題和解決過程
    • 代碼托管
    • 上周考試錯題總結
    • 學習進度條
    • 參考資料

20175234 2018-2019-2 《Java程序設計》第十周學習總結

教材學習內容總結

12.1進程與線程

  • 進程:程序的一次動態執行過程中,從代碼加載、執行至執行完畢的一個完整過程。
  • 線程:一個進程在執行中,可以產生多個執行線索,每條線索也有產生、存在和消亡的過程。

12.2 Java中的線程

  • 多線程:一個應用程序中同時存在幾個執行體,按幾條不同的執行線索共同工作的情況
  • 線程的周期:線程使用Thread類及其子類對象來表示線程

技術分享圖片
(圖片參考JAVA多線程常見的十大問題)

  • 新建:新建時就有了內存空間

  • 運行調用start();方法通知JVM,排隊等候切換線程。如果使用Thread的子類創建的,需要重寫run();方法。

  • 中斷:
    ①JVM將CPU切換給其他線程
    ②線程在使用CPU資源的時候,使用了sleep(int millsecond)方法,使當前線程進入休眠狀態。一旦執行sleep方法,則立即進入休眠狀態,在等待指定的秒數後,重新進入線程隊列中排隊等待CPU資源
    ③線程在使用CPU資源的時候,使用了wait()方法,需要其他線程調用notify()方法,使它進入等待CPU資源的狀態,以便從中斷初繼續進行。
    ④線程在使用CPU資源的時候,執行某個操作進入阻塞狀態。
  • 死亡:執行完了run()方法中全部語句。或被提前強制性終止。

12.3 Thread類與線程的創建

  • 使用Thread的子類, 需要重寫父類的run()方法。
  • 用Thread類直接創建線程對象。Thread(Runnable target)(該構造方法中的參數是一個Runnable類型的接口。)
  • 目標對象與線程的關系
    • 目標對象和線程完全解耦。目標對象沒有組合線程對象.目標對象經常需要通過獲得線程的名字(因為無法獲得線程對象的引用)以便確定是哪個線程正在占用CPU資源,即被JVM正在執行的線程。
    • 目標對象組合線程(弱耦合)。目標對象可以組合線程.目標對象類組合線程對象時, 目標對象可以通過獲得線程對象的引用。

12.4 線程的常用方法

  • 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資源。

12.5 線程同步

當兩個或多個線程同時訪問同一個變量,並且一個線程需要修改這個變量。
在處理線程同步時,要修改數據的方法用關鍵字synchronized來修飾。

12.6 協調同步的線程

  • wait()方法可以中斷方法的執行,使本線程等待,暫時讓出CPU的使用權,並允許其它線程使用這個同步方法。
  • notifyAll()方法通知所有的由於使用這個同步方法而處於等待的線程結束等待。曾中斷的線程就會從剛才的中斷處繼續執行這個同步方法,並遵循“先中斷先繼續”的原則。
  • notify()方法只是通知處於等待中的線程的某一個結束等待。

12.7 線程聯合

一個線程A在占有CPU資源期間,可以讓其它線程調用join()和本線程聯合,如:B.join(); 稱A在運行期間聯合了B。

12.8 GUI線程

12.9 計時器線程

12.10守護線程

教材學習中的問題和解決過程

問題描述:每次運行結果不同,且運行結果不理想
技術分享圖片

技術分享圖片

原因:java中的多線程是搶占式,誰搶到了cpu,cpu才會給他分配時間片,所以每次執行結果不一樣

代碼托管

技術分享圖片

上周考試錯題總結

  • 技術分享圖片

  • 相關知識點:JDBC 驅動的四種類型 :①JDBC-ODBC Bridge Driver②Native API Driver③JDBC-Net Driver④Native Protocal Driver。

資料來源:百科JDBC驅動程序

技術分享圖片

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 51/51 1/1 12/20 Java的重要起步
第二周 460/511 2/3 30/32 Java的簡單語句學習
第三周 803/1314 2/5 25/57 Java的基礎學習
第四周 485/1699 1/6 20/77 Java的子類與繼承
第五周 393/2092 1/7 20/97 Java的接口與實現
第六周 156/2321 2/9 18/115 內部類和異常類、輸入輸出流
第七周 1225/3546 2/11 20/135 常用類及方法
第八周 487/4032 2/13 20/155 泛型與集合框架
第九周 843/5105 2/15 12/167 JDBC與MySQL數據庫
第十周 910/6015 3/18 10/177 Java多線程機制

參考資料

  • Java學習筆記(第8版)

  • 《Java學習筆記(第8版)》學習指導

  • JDBC驅動程序

  • JAVA多線程常見的十大問題

20175234 2018-2019-2 《Java程序設計》第十周學習總結