學號20155311 2016-2017-2 《Java程序設計》第6周學習總結
教材學習內容總結
第十章 輸入/輸出
InputStream類html
InputStream包含三個read()方法用於從流中讀取數據:
public abstract int read();
抽象方法,以int類型返回流中可用的下一個字節。讀取到末尾,返回-1。java
- public int read(byte[]array); 該方法從流中讀取字節填充到數組array的連續元素中,最大讀取長度爲array.length個字節。讀取到末尾,返回-1。
- public int read(byte[] array, int offset, int length); 該方法從流中讀取length長度的字節填充到數組array中,將array[offset]做爲存放起始位置。讀取到末尾,返回-1。
- public int available(); 返回輸入流中能夠讀取的字節數。注意:若輸入阻塞,當前線程將被掛起,若是InputStream對象調用這個方法的話,它只會返回0,這個方法必須由繼承InputStream類的子類對象調用纔有用。
public long skip(long n); 忽略輸入流中的n個字節,返回值是實際忽略的字節數, 跳過一些字節再讀取。
若是發生I/O類型錯誤,會拋出IOException類型的異常。
OutputStream類
OutputStream提供了3個write()方法來輸出數據,和InputStream相對應:
public abstract void write(int b); 先將int轉換成byte類型,把低字節寫入到輸出流中。
public void write(byte[] array); 將數組array中的字節寫到輸出流。
public void write(byte[] array, int offset, int length); 將數組array中從array[offset]開始的length個字節寫到輸出流。
public void flush(); 將數據緩衝區中數據所有輸出,並清空緩衝區。
若是發生I/O類型錯誤,會拋出IOException類型的異常。
git
10.2 字符處理類
- 包java.io中的兩個類Reader和Writer,他們是能將字節流以字符流方式進行讀寫的對象,所以字符流在本質上是以Reader和Writer封裝的字節流。Reader和Writer都是抽象類,這兩個類都實現了聲明close()方法的AutoCloseable接口。
- Reader和Writer類以及他們的子類自己都不是流,可是他們提供了一些方法,可用於將底層的流做爲字符流讀寫。所以,一般使用底層的InputStream和OutputStream對象來建立Reader和Writer對象。
第十一章部分 - 線程與並行API
11.1 線程
- 線程 能夠擁有多個流程,也就是多線程程序若是想在main()之外獨立創建流程,能夠撰寫類操做java.lang.Runnable接口,流程的進入點是操做在run()方法中;從main()開始的流程會由主線程執行,建立Thread實例來執行runnable實例定義的run()方法;要啓動線程執行指定流程,必需要調用Thread實例的start()。 Thread與Runnable 將流程定義在 Runnable 的 run()方法中;繼承 Thread 類,從新定義 run()方法。
- 線程生命週期 一個 Thread被標示爲 Daemon線程,在全部非Daemon線程都結束時,JVM自動終止;使用 setDaemon()方法來設定一個線程是否爲 Deamon線程,使用 isDaemon()方法判斷線程是否爲 Deamon線程默認全部從 Deamon線程產生的線程也是 Deamon線程;
- 使用 Thread的 setpriority()方法設定優先權,1-10,默認值是5讓線程進入 Blocked狀態,調用 Thread.sleep()等方法,等待輸入/輸出線程因輸入/輸出進入 Blocked狀態,在完成輸入/輸出後,會回到 runnable狀態;join()將線程加入另外一線程的流程中;線程完成run()方法後,會進入Dead,進入Dead的線程不能夠再次調用start()方法。
- ThreadGroup 線程一旦納入某個羣組,就沒法更換;java.lang.ThreadGroup能夠管理羣組中的線程; interrupt()方法能夠中斷羣組中的全部線程;
- setMaxpriority()方法能夠設定羣組中全部線程最大優先權; enumerate()方法能夠一次取得羣組中全部線程; activeCount()方法取得羣組的線程數量; uncaughtException()方法處理某個線程未被捕捉的異常。 synchronized與volatile 被標示爲 synchronized的區塊將會被監控,任何線程要執行該區塊必須先取得指定的對象鎖定;線程嘗試執行synchronized區塊而進入 Blocked,在取得鎖定以後,會先回到Runnable狀態,等待排入 Runnning狀態; synchronized要求達到的所標示區塊的互斥性,與可見性;在變量上聲明 volatile,表示變量是不穩定、易變的,可能在多線程下存取,保證變量的可見性。
- 在java中,若是想在main()之外獨立設計流程,能夠撰寫類操做java.lang.Runnable接口,流程的進入點是操做在run()方法中。若是想要爲JVM加裝CPU,就是建立Thread實例,要啓動額外CPU就是調用Thread實例的start()方法,額外CPU執行流程的進入點,能夠定義在Runnale接口的run()方法中。
- 操做Runnable接口的好處就是較有彈性,你的類還有機會繼承其餘類。若繼承了Thread,那該類就是一種Thread,一般是爲了直接利用Thread中定義的一些方法,纔會繼承Thread來操做。
11.2 並行API
- Lock:相對與Thread模型的隱式的鎖對象,Lock提供了顯式的鎖操做從而簡化應用程序。Executors:提供了一組HighLevelAPI用來執行和管理並行任務。
- ConcurrentCollections:包含了一組支持並行處理的數據結構,大大簡化了並行編程難度。AtomicVariables:減小了同步操做而且避免數據不一致。Fork/Join框架:提供了進程操做的支持。
- ReadWriteLock接口定義了讀取鎖定與寫入鎖定行爲,可使用readLock()、writeLock()方法返回Lock操做對象。ReentrantReadWriteLock是ReadWriteLock接口的主要操做類,readLock()方法會返回ReentrantReadWriteLock.ReadLock實例,writeLock()犯法會返回ReentrantReadWriteLock.WriteLock實例。
- Condition接口用來搭配Lock,最基本用法就是達到Object的wait()、notify()、notifyAll()方法的做用。Condition的await()、signal()、signalAll()方法,可視爲Object的wait()、notify()、notifyAll()方法的對應。
教材學習中的問題和解決過程
第十章第十一章感受還好,第四五六七章的內容纔是java核心內容,比較抽象。以後的內容都是介紹各類API的應用,都是活生生的例子,比較具體,若是以爲難那是由於對這部分知識感到陌生,不熟悉編程
代碼調試中的問題和解決過程
P334的代碼爲何要用threadB?api
程序啓動後主線程就開始,在主線程中新建threadB,並在啓動threadB後 ,將之加入主線程流程,因此threadB會先執行完畢,而後主線程纔會繼續本來的流程。數組
git log運行截圖
數據結構
上週考試錯題總結
基於評分標準,我給本博客打分:10。得分狀況以下:
1.正確使用Markdown語法(加1分)
2.錯題學習深刻的(加1分)
3.教材學習中的問題和解決過程(加3分)
4.進度條中記錄學習時間與改進狀況(加1分)
5.本週有效代碼超過400行(加2分)
6.模板中的要素齊全(加1分)
7.代碼調試中的問題和解決過程(加1分)多線程
評分標準
- 正確使用Markdown語法(加1分):
- 不使用Markdown不加分
- 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
- 排版混亂的不加分
- 模板中的要素齊全(加1分)
- 缺乏「教材學習中的問題和解決過程」的不加分
- 缺乏「代碼調試中的問題和解決過程」的不加分
- 代碼託管不能打開的不加分
- 缺乏「結對及互評」的不能打開的不加分
- 缺乏「上週考試錯題總結」的不能加分
- 缺乏「進度條」的不能加分
- 缺乏「參考資料」的不能加分
教材學習中的問題和解決過程, 一個問題加1分框架
代碼調試中的問題和解決過程, 一個問題加1分學習
- 本週有效代碼超過300分行的(加2分)
- 其餘加分:
- 週五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進狀況的加1分
- 有動手寫新代碼的加1分
- 課後選擇題有驗證的加1分
- 代碼Commit Message規範的加1分
- 錯題學習深刻的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
- 結對學習狀況真實可信的加1分
- 扣分:
- 有抄襲的扣至0分
- 代碼做弊的扣至0分
- 遲交做業的扣至0分
點評模板:
點評過的同窗博客和代碼
基於評分標準,我給本博客打分: 9分。得分狀況以下:
- 正確使用Markdown語法:加1分
- 教材學習中的問題和解決過程,:加1分
- 代碼調試中的問題和解決過程,:加2分
- 本週有效代碼超過300分行:加2分
- 排版精美的加1分
- 進度條中記錄學習時間與改進狀況的加1分
- 有動手寫新代碼的加1分
- 正確使用Markdown語法(加1分)
- 錯題學習深刻的(加1分)
- 教材學習中的問題和解決過程(加2分)
- 進度條中記錄學習時間與改進狀況(加1分)
- 本週有效代碼超過400行(加2分)
- 版式精美(加1分)
- 正確使用Markdown語法(加1分)
- 錯題學習深刻的(加1分)
- 教材學習中的問題和解決過程(加2分)
- 進度條中記錄學習時間與改進狀況(加1分)
- 本週有效代碼超過400行(加2分)
- 模板中的要素齊全(加1分)
- 代碼調試中的問題和解決過程(加1分)
- 版式精美(加1分)
基於評分標準,我給本博客打分:10。得分狀況以下:
- 正確使用Markdown語法(加1分)
- 錯題學習深刻的(加1分)
- 教材學習中的問題和解決過程(加2分)
- 進度條中記錄學習時間與改進狀況(加1分)
- 本週有效代碼超過400行(加2分)
- 模板中的要素齊全(加1分)
- 代碼調試中的問題和解決過程(加1分)
- 版式精美(加1分)
其餘(感悟、思考等,可選)
雖然說這周又是自學兩章,知識點比較多,沒什麼難點,java的核心知識與難點以前都已經學完了,後面的章節全都是介紹一些類的應用。看第一遍教材的時候確定以爲陌生,難以接受。這是個過程,很正常。在不斷的學習中,我也在不斷的尋找適合本身的好的學習方法。重要的不是要你學多少java知識,而是經過不斷的學習過程,來總結出一套適合本身的良好的學習方法,這將受用一輩子。固然不一樣的人確定狀況不同,適合本身的纔是最好的。時間用得多,不必定就學得好。找到屬於本身的學習方法,提升效率!這比一切都重要!
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
200/200 |
2/2 |
20/20 |
|
第二週 |
300/500 |
2/4 |
18/38 |
|
第三週 |
500/1000 |
3/7 |
22/60 |
|
第四周 |
300/1300 |
2/9 |
30/90 |
|
第五週 |
280/1260 |
1/5 |
14/70 |
|
|
第六週 |
478/1738 |
2/7 |
16/86 |