20175212童皓楨 《Java程序設計》第十週學習總結

學號 2016-2017-2 《Java程序設計》第X周學習總結

教材學習內容總結

1、Java中的線程的狀態

建的線程在它的一個完整的生命週期中一般要經歷以下的四種狀態:html

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

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

3.中斷:有4種緣由的中斷:多線程

JVM將CPU資源從當前線程切換給其餘線程,使本線程讓出CPU的使用權處於中斷狀態。學習

線程使用CPU資源期間,執行了sleep(int millsecond)方法,使當前線程進入休眠狀。線程

線程使用CPU資源期間,執行了wait()方法。設計

線程使用CPU資源期間,執行某個操做進入阻塞狀態。調試

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

2、 Thread類與線程的建立

使用Thread建立線程一般使用的構造方法是:htm

Thread(Runnable target)

在建立線程對象時必須向構造方法的參數傳遞一個實現Runnable接口類的實例,該實例對象稱做所創線程的目標對象,當線程調用start()方法後,一旦輪到它來享用CPU資源,目標對象就會自動調用接口中的run()方法(接口回調)。

3、線程經常使用方法

1.start() : 線程調用該方法將啓動線程,使之重新建狀態進入就緒隊列排隊,一旦輪到它來享用CPU資源時,就能夠脫離建立它的線程獨立開始本身的生命週期了。

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

3.sleep(int millsecond): 優先級高的線程能夠在它的run()方法中調用sleep方法來使本身放棄CPU資源,休眠一段時間。

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

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

6.interrupt() :一個佔有CPU資源的線程可讓休眠的線程調用

4、 線程同步

在處理多線程問題時,咱們必須注意這樣一個問題:當兩個或多個線程同時訪問同一個變量,而且一個線程須要修改這個變量。咱們應對這樣的問題做出處理。

在處理線程同步時,要作的第一件事就是要把修改數據的方法用關鍵字synchronized來修飾。

所謂線程同步就是若干個線程都須要使用一個synchronized修飾的方法。

5、 線程聯合

一個線程A在佔有CPU資源期間,可讓其它線程調用join()和本線程聯合,如:
B.join();

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

教材學習有問題先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是別人沒有提出相同問題,能夠編輯文檔添加,而後把本身提出的問題複製到下面:

  • 問題1:實做Runnablerun()中定義額外流程好?仍是繼承Threadrun()中定義額外流程好?
  • 問題1解決方案:實做Runnable接口的好處就是較有彈性,你的類別還有機會繼承其它類別

若繼承了Thread,那該類別就是一種Thread,一般是爲了直接利用Thread中定義的一些方法,纔會繼承Thread來實做

若是主線程中啓動了額外線程,預設會等待被啓動的全部線程都執行完run()方法才停止JVM。

若是一個Thread被標示爲Daemon線程,在全部的非Daemon線程都結束時,JVM自動就會終止。

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

代碼託管

輸入圖片說明

上週考試錯題總結

  • 下列關於HashMap 泛型類經常使用方法的介紹,正確的是

A .public boolean isEmpty()若是此映射不包含鍵-值映射關係,則返回 true。

B .public V get(Object key)返回指定鍵所映射的值;若是此映射不包含該鍵的映射關係,則拋出異常。

C .public V put(K key, V value) 在此映射中關聯指定值與指定鍵。若是該映射之前包含了一個該鍵的映射關係,則以先定義的值爲準。

D .public Object clone()返回此 HashMap 實例的淺表副本:並不複製鍵和值自己。

解析:查詢API。B項:若是此映射不包含該鍵的映射關係,則返回null。C項:若是該映射之前包含了一個該鍵的映射關係,則舊值被替換。

結對及互評

評分標準

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

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

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

點評模板:

  • 博客中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 代碼中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 基於評分標準,我給本博客打分:XX分。得分狀況以下:xxx

  • 參考示例

點評過的同窗博客和代碼

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

xxx
xxx

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 6/6 1/1 20/20
第二週 245/251 1/2 18/38
第三週 633/884 1/3 22/60
第四周 305/1189 1/4 30/90
第五週 410/1599 3/7 30/120
第六週 1135/2734 3/10 30/150
第七週 781/3515 3/13 30/180
第八週 710/4225 3/16 30/210
第九周 775/5000 2/18 30/240
第十週 933/5933 1/19 30/270

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

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

  • 計劃學習時間:XX小時

  • 實際學習時間:XX小時

  • 改進狀況:

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

參考資料

相關文章
相關標籤/搜索