20145105 《Java程序設計》第6周學習總結

20145105 《Java程序設計》第6周學習總結

教材學習內容總結

第十章 輸入/輸出

1、InputStream與OutputStreamhtml

(一)串流設計的概念java

  1. 輸入串流表明對象:java.io.InputStream
  2. 輸出串流表明對象:java.io.OutputStreamgit

    範例IOapi

  3. 將某個文檔讀入並另存爲另外一個文檔:服務器

    範例Copy架構

  4. 從HTTP服務器讀取某個網頁,並另存爲文檔學習

    範例Download.net

(二)串流繼承結構線程

  1. 標準輸入/輸出:設計

    • 使用System的setIn(),從新指定標準輸入來源。

    範例StandardIn

    • 使用System的setOut(),將結果輸出至指定目的地。

    範例StandardOut

(三)串流處理裝飾器

  1. BufferedInputStream與BufferedOutputStream

    • 提供內部緩衝區功能

    範例BufferedIO

  2. DataInputStream與DataOutputStream

    • 用來裝飾InputStream等提供讀取、寫入Java基本數據類型的方法

    範例Member

    範例MemberDemo

  3. ObjectInputStream與ObjectOutputStream

    • 提供readObject()將數據讀入爲對象,writeObject()將對象寫至目的地

    範例Member2

    範例Member2Demo

2、字符處理類

(一)Reader與Writer繼承架構

  1. 針對字符讀取:java.io.Reader類
  2. 針對字符寫入:java.io.Writer類

    範例CharUtil

    範例CharUtilDemo

(二)字符處理裝飾器

  1. InputStreamReader與OutputStreamWriter

    • 對串流數據打包

    範例CharUtil2

  2. BufferedReader與BufferedWriter

    • 對Reader、Writer提供緩衝區
  3. PrintWriter

    • 對Writer進行打包

第十一章 線程與並行API

1、線程

(一)線程簡介

  • [範例TortoiseHareRace](http://git.oschina.net/schwarizard/Chapter-11/blob/master/TortoiseHareRace?dir=0&filepath=TortoiseHareRace&oid=dc06bda11591ac12e1cee75c409aea268c8c4c1f&sha=db18b24bfd822ddb2170d450abd0d47f80fe2c1e)
  1. Java中,能夠經過撰寫類操做java.lang.Runnable接口,流程進入點操做在run()方法中,建立Thread實例來執行run()方法。

    範例Tortoise

    範例Hare

    範例TortoiseHareRace2

(二)Thread與Runnable

  1. 操做Runnable接口較有彈性,還有機會繼承其餘類。
  2. 繼承Thread一般是爲了直接利用Thread中定義的一些方法。

(三)線程生命週期

  1. Daemon線程

    • 全部非Daemon線程都結束時,JVM自動終止。

    範例DaemonDemo

  2. Thread基本狀態圖

    • Runnable:可執行
    • Blocked:被阻斷
    • Running:執行中

    範例Download

    範例Download2

    範例InterruptedDemo

  3. 安插線程

    • 使用join()能夠將線程加入成爲另外一線程的流程中。

    範例JoinDemo

  4. 中止線程

    • 使用stop()會直接釋放全部已鎖定對象,可能使對象陷入沒法預期狀態。

(四)關於ThreadGroup

(五)synchronized與volatile

  1. 使用synchronized

    • 執行方法必須取得該實例的鎖定
    • 不正確使用synchornized可能形成效能低落或死結

    範例DeadLockDemo

  2. 使用volatile

    • 能夠達到變量範圍

    範例Variable1Test

    範例Variable2Test

    • 能夠在變量上聲明volatle,表示變量是不穩定、易變的。

    範例Variable3Test

(六)等待與通知

  1. 調用鎖定對象的wait方法,線程會釋放對象鎖定,並進入對象等待集合(阻斷狀態)
  2. 放在等待集合的線程不會參與CPU排班,wait()能夠指定等待時間。
  3. 線程被notify()或時間到時,再開始執行。

    範例Producer

    範例Consumer

    範例Clerk

    範例ProducerConsumerDemo

2、並行API

(一)Lock、ReadWriteLock與Condition

  1. 使用Lock

    • Lock接口主要操做類之一是ReentrantLock,能夠達到syncharonized的做用。

    範例ArrayList

    • Lock還定義tryLock()方法。

    範例NoDeadLockDemo

  2. 使用ReadWriteLock

    • ReadWriteLock接口定義了讀取鎖定與寫入鎖定行爲

    範例ArrayList2

  3. 使用StampedLock

    • StampedLock類可支持樂觀讀取

    範例ArrayList3

  4. 使用Condition

    • Condition接口用來搭配Lock

    範例Clerk1

    範例Clerk2

(二)使用Executor

  1. 使用ThreadPoolExeecutor

  2. 使用ScheduledThreadPoolExecutor

  3. 使用ForkJoinPool

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

  1. 不少代碼運行時都會出現以下狀況,還沒有解決

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

由於上傳博客時死機了(多是同時開啓的程序太多),強制關機後不少東西都不見了,還要從新再寫一遍,知識點還好,代碼打的簡直心累,但願下週不要再發生這種事了

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 3000行 15篇 300小時
第一週 70/70 2/2 14/14
第二週 150/220 1/3 18/32
第三週 400/620 1/4 35/67
第四周 850/1470 1/5 30/97
第五週 560/2030 1/6 34/131
第六週 970/3000 2/8 46/177

參考資料

相關文章
相關標籤/搜索