20165214 第八週學習任務

學號 2017-2018-2 《Java程序設計》第八週學習總結

教材學習內容總結

  • 12.1 進程與線程。線程比進程還小,一個進程的進行期間能夠產生多個線程。
  • 12.2 Java的多線程機制。Java內置對多線程的支持。咱們的計算機在任何給定說的時刻只能執行線程中的一個,Java虛擬機只是從一個線程迅速地切換到另外一個線程。
    • 當main方法中有其餘線程時,JVM一直要等到Java應用程序中的全部線程都結束後纔會結束Java應用程序。
    • Java語言使用Thread類及其子類的對象來表示線程。新建的線程通常要經歷4個狀態:
      ① 建立Thread對象;
      ② 在第一步建立對象後,該對象僅僅擁有內存次元,須要再調用start()方法才能使得其成爲新線程。若是這個線程是Thread的對象,類中的run()方法就馬上執行,且程序必須在子類中重寫run()方法。注意,線程沒有結束run()方法以前,不要讓線程再調用start()方法,不然拋出IllegalThreadStateException異常。
      ③ 線程中斷:切換給其餘線程;執行了sleep(int time)方法,通過time毫秒後,該線程就從新排隊,以便從中斷處繼續運行;執行了wait()方法,線程進入等待狀態,此時,其餘線程調用notify()方法來使得在等待狀態的線程從新排隊以便從中斷處繼續運行;執行某個操做進入阻塞狀態時不能進入排隊隊列。
      ④ 線程有兩種緣由會「死亡」,一是正常運行完了該線程的所有工做;二是run()方法被強制結束。當一個線程「死亡」以後,未死亡的線程會繼續輪流佔用CPU。
    • 線程是能夠設置優先級的(使用setPriority()方法),當優先級高的線程執行完畢時,纔會執行低優先級的線程。可使用getPriority()方法來得到線程的優先級,優先級只能在1~10之間。
  • 12.3 Thread類與線程的建立。
    • 可使用Thread類或者子類建立線程對象,注意子類必須重寫run()方法,同時子類能夠增長新的成員變量、方法使線程有具體的功能。
    • 若目標對象與線程徹底解耦(建立目標對象的列不包含對線程對象的引用),目標對象可使用String name=Thread.currentThread().getName();來得到當前使用CPU資源的線程名字;若目標對象組合線程,則目標對象可使用String name=Thread.currentThread();來得到當前使用CPU資源的線程引用。
    • 若是在目標對象中有對其中某個線程進行了「睡眠」處理,那麼在計算機運行程序的時候,能夠會具備不一樣的結果。由於線程的進行若是到達指定毫秒數尚未運行完run()方法,那麼會先中止,等到睡眠時間結束後再接着運行。
  • 12.4 線程的經常使用方法
    • start()方法:只有新建立的線程才能夠調用該方法。
    • run()方法:該方法是否運行結束是判斷線程是否結束的一個重要標準。只有當該方法運行結束後,線程才能再次調用start()方法。
    • sleep(int millsecond)方法:線程能夠調用該方法來使程序進入睡眠,知道過了參數指定的秒數事後才「醒來」。該方法必須在try-catch語句中調用,由於線程若是在休眠中被打斷,會拋出InterruptedException異常。
    • isAlive()方法:該方法用來判斷線程是否正在運行,如果,返回true,若不是,返回false。注意,一個已經運行的線程在沒有進入死亡狀態時,不要再給線程分配實體。
    • currentThread()方法是Thread類中的類方法,返回當前使用CPU的線程。
    • interrupt()方法用來「喚醒」調用sleep方法而處於睡眠狀態的線程。
  • 12.5 線程同步:若是有若干個線程須要同時使用一個方法,爲了避免出現混亂,可使用synchronized進行修飾。這樣一來,該方法只能輪流被調用,直到正在調用該方法的線程使用完該方法後,其餘線程才能夠調用該方法。
  • 12.6 協調同步的線程:當一個線程使用的同步方法中用到了某個變量,而此變量又須要其餘線程修改後才能符合本線程的要求,則可使用wait()方法來中斷線程的執行,並容許其餘線程使用這個同步方法(sleep方法是作不到這個功能的)。如有線程在運行同步方法時不須要等待,那麼須要在用完方法的同時應用notifyAll()方法來通知其餘全部處於等待的線程結束等待。只有在同步線程中才可使用wait(),notify(),notifyAll()方法
  • 12.7 線程聯合:線程A在其運行期間,若是其餘線程B調用了join()方法和線程A聯合,那麼A線程會立馬中斷,直到B線程運行結束A線程纔會從新排隊。若B線程已經結束,調用join()方法則不會有任何效果。
  • 12.8 GUI線程:Java包含GUI(圖形用戶界面)時,會啓動多個線程。
  • 12.9 計時器線程:Java中的javax.swing包中的Timer類能夠用來建立計時器:Timer(int a,Object b);,a爲毫秒,b爲監視器(監視器必須是組件類),每隔a毫秒會執行b一次。注意java.util包中也有一個名字是Timer的類,使用類名時須要注意避免混淆。
  • 12.10 守護線程:線程默認是非守護線程,線程在運行以前必須設置本身是否爲守護線程。能夠調用voidsetDaemon(boolean on)來將本身設置成一個守護線程。當全部非守護線程運行結束時,守護線程必定會跟着結束。

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

  • 問題1:教材中本章後面的內容涉及到了一些組件、按鈕等,使得我在看程序的時候,看得不是很明白
  • 問題1解決方案:尚未解決,等以後學習了組件、按鈕事後要再回過頭來看這些程序。

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

  • 問題1:在計時器線程這一小節的時候提到過,除了javax.swing類,java.util也有一個Timer類,要避免在使用它們時出錯。因而在敲Example12_12代碼的時候,我把裏面的import java.util.Date;換成了import java.util.*;想讓他們衝突看看會有什麼樣的後果。
  • 問題1解決方案:惋惜換了以後仍是沒有衝突。。不知道怎麼樣纔會產生衝突呢?

代碼託管

上週考試錯題總結

  • 錯題1:
    html

  • 錯題1理解:populate只是用來寫入對象的數據。
  • 錯題2:
    java

  • 錯題2理解:select並非數據操做語言git

結對及互評

  • 本週結對學習狀況
    • 結對照片
      數據庫

    • 結對學習內容
  • 上週博客互評狀況

其餘

本週的學習包括兩方面的內容,一個是把上週的數據庫的內容給完善了,另外一個是學習了Java的多線程機制。
一直以來,跟着婁老師的學習要求來走,明顯感受到了本身的學習能力有着很大的提高,特別是抓要點和總結知識的能力。從此也會繼續按照婁老師的要求好好作,讓本身的Java水平不斷提升~編程

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 36/36 1/1 8/8
第二週 432/468 2/3 15/23
第三週 964/1432 1/4 16/39
第四周 725/2157 1/5 14/53
第五週 1428/3585 3/8 18/71
第六週 1323/4908 1/9 17/88
第七週 960/5868 3/12 22/110
第八週 993/6861 2/14 23/133
  • 計劃學習時間:22小時多線程

  • 實際學習時間:23小時學習

相關文章
相關標籤/搜索