20165228 2017-2018-2 《Java程序設計》第8周學習總結

20165228 2017-2018-2 《Java程序設計》第8周學習總結

教材學習內容總結

  • 進程與線程的關係
  • 多線程的運行機制
  • 線程的四種狀態:新建、運行、中斷、死亡
  • 使用Thread類或子類建立線程對象的特色
  • 掌握線程的經常使用方法:
    • start():線程調用該方法將啓動線程,使之重新建狀態進入就緒隊列排隊
    • 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()方法只是通知處於等待中的線程的某一個結束等待
  • 線程聯合:一個線程A在佔有CPU資源期間,可讓其它線程調用join()和本線程聯合
  • AWT-EventQuecue線程負責處理GUI事件,AWT-Windows線程負責將窗體或組件繪製到桌面
B.join()

若準備聯合的B線程已經執行結束,則B.join()不會產生任何效果java

  • 使用Timer類的方法start()啓動計時器,即啓動線程。使用Timer類的方法stop()中止計時器,即掛起線程,使用restart()從新啓動計時器,即恢復線程
  • 守護線程:一個線程調用void setDaemon(boolean on)方法能夠將本身設置成一個守護(Daemon)線程
thread.setDaemon(true);

當程序中的全部用戶線程都已結束運行時,即便守護線程的run方法中還有須要執行的語句,守護線程也馬上結束運行git

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

  • 問題1:多個線程搶cpu,該怎麼決定誰先誰後?
  • 問題1解決方案:由於線程的優先級只有1,5,10.當沒有設置優先級的時候,默認優先級爲5。因此是隨機的,可是咱們能夠控制
  • 問題2:如何實現多線程併發執行?
  • 問題2解決方案:當機器有多個CPU,JVM就能充分利用它,實現併發執行數組

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

  • 問題1:在敲本身編的代碼時,提示java.lang.ArrayIndexOutOfBoundsException
  • 問題1解決方案:出現該問題是由於數組出現了越界。通過檢查後發現我在程序中訪問了一個大於數組長度的位置多線程

    代碼託管

(statistics.sh腳本的運行結果截圖)併發

上週考試錯題總結

  • 錯題1:
    executeUpdate返回的類型是int,表明的含義是受影響的記錄 A
    A . true
    B . false
    • 解析:用於執行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數據定義語言)語句。executeUpdate 的返回值是一個整數,指示受影響的行數(即更新計數)。對於 CREATE TABLE 或 DROP TABLE 等不操做行的語句,executeUpdate 的返回值總爲零學習

      結對及互評

      博客中值得學習的或問題:
  • 要素全面
  • 很認真細緻
  • 排版簡介美觀
    代碼中值得學習的或問題:
  • 代碼中文件分類簡潔
  • 很認真

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

本週學習了多線程的知識,推翻了我以往對「多線程就是多個任務同時進行」的錯誤認識,而且學習到相關的操做線程的方法線程

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 25篇 400小時
第一週 235/235 1/1 15/15
第二週 224/459 2/3 15/30
第三週 443/902 1/4 15/73
第四周 577/1479 2/6 17/90
第五週 1222/2360 1/7 14/104
第六週 1527/3294 1/8 14/118
第七週 591/3883 1/9 14/132
第八週 1705/5158 1/10 12/144
  • 計劃學習時間:15小時
  • 實際學習時間:12小時
相關文章
相關標籤/搜索