第十週學習總結-20175218

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

教材學習內容總結

  • 第十二章主要講的是Java多線程機制,主要內容包括:Java中的線程,Thread類與線程的建立,線程的經常使用方法,線程同步,協調同步的線程,線程聯合,GUI線程以及計時器線程。
  • 程序是一段靜態的代碼,它是應用軟件執行的藍本。而進程是程序的一次動態執行過程,它對應了從代碼加載、執行至執行完畢的一個完整過程,這個過程也是進程自己從產生、發展至消亡的過程。
  • 線程是比進程更小的執行單位,一個進程在其執行過程當中,能夠產生多個線程,造成多條執行線索,每條線索,即每一個線程也有它自身的產生、存在和消亡的過程。
  • 每一個Java應用程序都有一個缺省的主線程。當JVM(Java Virtual Machine 虛擬機)加載代碼,發現main方法以後,就會啓動一個線程,這個線程稱爲「主線程」(main線程),該線程負責執行main方法。JVM一直要等到Java應用程序中的全部線程都結束以後,才結束Java應用程序 。
  • 建的線程在它的一個完整的生命週期中一般要經歷以下的四種狀態:
    1. 新建: 當一個Thread類或其子類的對象被聲明並建立時,新生的線程對象處於新建狀態。
    2. 運行 :線程必須調用start()方法(從父類繼承的方法)通知JVM,這樣JVM就會知道又有一個新一個線程排隊等候切換了。一旦輪到它來享用CPU資源時,此線程的就能夠脫離建立它的主線程獨立開始本身的生命週期了。
    3. 中斷:有4種緣由的中斷:
      • JVM將CPU資源從當前線程切換給其餘線程,使本線程讓出CPU的使用權處於中斷狀態。
      • 線程使用CPU資源期間,執行了sleep(int millsecond)方法,使當前線程進入休眠狀。
      • 線程使用CPU資源期間,執行了wait()方法。
      • 線程使用CPU資源期間,執行某個操做進入阻塞狀態。
    4. 死亡 :處於死亡狀態的線程不具備繼續運行的能力。線程釋放了實體。
  • Java調度器的任務是使高優先級的線程能始終運行,一旦時間片有空閒,則使具備同等優先級的線程以輪流的方式順序使用時間片。
  • 在編寫Thread類的子類時,須要重寫父類的run()方法,其目的是規定線程的具體操做,不然線程就什麼也不作,由於父類的run()方法中沒有任何操做語句。
  • 在建立線程對象時必須向構造方法的參數傳遞一個實現Runnable接口類的實例,該實例對象稱做所創線程的目標對象,當線程調用start()方法後,一旦輪到它來享用CPU資源,目標對象就會自動調用接口中的run()方法(接口回調)。
  • 從對象和對象之間的關係角度上看,目標對象和線程的關係有如下兩種情景。
    1. 目標對象和線程徹底解耦
      • 目標對象沒有組合線程對象.目標對象常常須要經過得到線程的名字(由於沒法得到線程對象的引用)以便肯定是哪一個線程正在佔用CPU資源,即被JVM正在執行的線程。
    2. 目標對象組合線程(弱耦合)
      • 目標對象能夠組合線程.目標對象類組合線程對象時, 目標對象能夠經過得到線程對象的引用。
  • 在處理多線程問題時,咱們必須注意這樣一個問題:當兩個或多個線程同時訪問同一個變量,而且一個線程須要修改這個變量。咱們應對這樣的問題做出處理。在處理線程同步時,要作的第一件事就是要把修改數據的方法用關鍵字synchronized來修飾。所謂線程同步就是若干個線程都須要使用一個synchronized修飾的方法。
  • 一個線程A在佔有CPU資源期間,可讓其它線程調用join()和本線程聯合,稱A在運行期間聯合了B。若是線程A在佔有CPU資源期間一旦聯合B線程,那麼A線程將馬上中斷執行,一直等到它聯合的線程B執行完畢,A線程再從新排隊等待CPU資源,以便恢復執行。若是A準備聯合的B線程已經結束,那麼B.join()不會產生任何效果。
  • 計時器每隔a 毫秒「震鈴」一次,參數b是計時器的監視器。計時器發生的震鈴事件是ActinEvent類型事件。當震鈴事件發生時,監視器就會監視到這個事件,監視器就回調ActionListener接口中的actionPerformed(ActionEvent e)方法。使用Timer類的方法start()啓動計時器,即啓動線程。使用Timer類的方法stop()中止計時器,即掛起線程,使用restart()從新啓動計時器,即恢復線程。

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

  • 問題1:什麼是線程中斷,線程中斷的方式以及查看線程中斷的方式
  • 問題1解決方案:
    1. 什麼是線程中斷?
      • 在咱們的Java程序中其實有不止一條執行線程,只有當全部的線程都運行結束的時候,這個Java程序纔算運行結束。 官方的話給你描述一下:當全部的非守護線程運行結束時,或者其中一個線程調用了System.exit()方法時,這個Java程序才能運行結束。
    2. 中斷線程的方式
      • Thread類中給咱們提供了中斷線程的方法,以下:
      • `public static boolean interrupted() {
    return currentThread().isInterrupted(true);

    }`html

    - 這個方法是檢查當前線程是否被中斷,中斷返回true,未中斷返回false
    1. 查看線程中斷的方式
      • 在Thread類中有一個方法interrupted()能夠用來檢查當前線程時候被中斷,還有isInterrupted()方法能夠用來檢查當前線程是否被中斷。中斷線程的方法其實底層就是將這個屬性設置爲true,isInterrupted()方法只是返回了這個屬性值而已。這兩個方法有一個區別就是isInterrupted()不能改變interrupted()的屬性值,可是interrupted()方法卻能改變interrupted的屬性值。
  • 問題2:java中建立線程的三種方法以及區別是什麼?
  • 問題2解決方案:
    • Java使用Thread類表明線程,全部的線程對象都必須是Thread類或其子類的實例。Java能夠用三種方式來建立線程,以下所示:
      • 1)繼承Thread類建立線程
      • 2)實現Runnable接口建立線程
      • 3)使用Callable和Future建立線程

代碼調試中的問題和解決過程

  • 問題1:不清楚Thread的使用
  • 問題1解決方案:
    • 線程簡單實現的三種方式
      • (1)第一種建立線程的方式是直接extends Thread 覆蓋run()方法便可。
      • (2)第二種實現的方式是實現Runnable接口,實現run()方法。
      • (3)第三種方式是 implements Callable,實現call()方法能夠獲得線程的執行結果;代碼不在寫。

代碼託管

statistics.sh腳本運行截圖

上週考試錯題總結

  1. 關於 Connection 的描述,何者正確?
    • A .能夠從 DriverManager 上取得 Connection
    • B .能夠從 DataSource 上取得 Connection
    • C .在方法結束以後 Connection 會自動關閉
    • D .Connection 是線程安全( Thread-safe)
    • 錯選:C
    • 正解:AB
    • 錯因:審題錯誤,選成錯誤的了
  2. 使用 Statement 來執行 SELECT 等查詢用的 SQL 指令時,應使用下列哪一個方法?
    • A .executeSQL()
    • B .executeQuery()
    • C .executeUpdate()
    • D .executeFind()
    • 錯選:A
    • 正解:B
    • 錯因:對於 SQL 的一些用法記得不夠清楚
  3. 哪些 JDBC 驅動程序能夠有跨平臺的特性?
    • A .TYPE 1
    • B .TYPE 2
    • C .TYPE 3
    • D .TYPE 4
    • 錯選:ABCD
    • 正解:CD
    • 錯因:對 JDBC 驅動理解不夠透徹

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分java

  4. 代碼調試中的問題和解決過程, 一個問題加1分git

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至0分
    • 代碼做弊的扣至0分
    • 遲交做業的扣至0分

點評過的同窗博客和代碼

  • 上週博客互評狀況(只要連接,具體點評放相應博客下)安全

其餘(感悟、思考等,可選)

對第六週的測試題進行了總結分析:
博客連接多線程

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 1/1 24/24
第二週 400/600 1/2 15/39
第三週 600/1200 1/3 18/57
第四周 700/1900 1/4 18/75
第五週 800/2700 5/9 18/93
第六週 800/3500 3/12 28/121
第七週 800/4300 3/15 18/139
第八週 900/5200 5/20 26/165
第九周 900/6100 4/24 24/189

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。學習

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法測試

  • 計劃學習時間:28小時線程

  • 實際學習時間:29小時設計

  • 改進狀況:調試

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索