《Java多線程編程核心技術》讀書筆記

《Java多線程編程核心技術》讀書筆記。

###第一章 Java多線程技能編程

  1. 使用Java多線程兩種方式。
    繼承Thread類與實現Runnable接口。多線程

  2. 線程的開始、停止、暫停、恢復、中止。
    start()interrupt()suspend()resume()stop()併發

  3. 線程的idname、優先級priority、守護daemon
    線程的id由內部自增字段維護,默認的name也是如此。優先級priority沒有強迫性。deamon表示本線程是否守護主線程。this

  4. 線程的sleepyieldwait區別。
    sleep不釋放鎖,不放棄當前CPU資源。yield不釋放鎖,放棄CPU資源。wait是釋放鎖,並放棄CPU資源。線程

  5. 線程跳出執行的方法。
    可以使用「異常法」,在同步代碼中根據線程是否interrupted,拋出異常,這樣中斷的消息能夠有調用棧中傳遞。調試

###第二章 對象及變量的併發訪問code

  1. synchronized同步方法與同步代碼塊。
    同步方法與同步代碼塊相似,鎖定的是this對象。對象

  2. 鎖同步對象爲實例與類的區別。
    實例對象鎖定的是實例對象,類鎖定的是類對象。繼承

  3. String爲鎖的特性。
    String對象有常量池,全部鎖定同一個字面量的String對象,是同一個對象鎖。接口

  4. synchronizedvolatile
    volatile主要做用是使變量在多線程間可見。而synchronized是保證多線程的同步性,同時有也有可見性。

  5. volatile的非原子性。
    volatile不具有同步性,也不具有原子性。

  6. Atomic相關類。
    相關類保證了原子性,可是沒有同步性,類的每一個方法之間調用不是原子性的。

  7. 同步方法的非繼承、異常自釋放,髒讀。
    同步方法不會繼承同步性,出現異常會自動釋放鎖,在多線程狀況下,可能會讀到已經被修改的值。

###第三章 線程間通訊

  1. Object中等待與通知的鎖模型。
    調用wait()方法,當前線程釋放鎖,會在wait()代碼中止執行,直到中斷或接到通知。調用notify()方法會在線程退出同步體後釋放鎖,並通知其餘在等待對象鎖的線程。

  2. 生產者與消費者模式。

  3. 管道進行線程通訊。
    經過字節流與字符流也可用於不一樣線程以前的通訊。

  4. Threadjoin方法實現機制。
    使用join() 可讓主線程等待子線程執行完成以前再結束。內部實現機制是讓主線程的進入子線程的join()方法,而後等待。由於join()是同步方法,沒人通知,因此會無限期阻塞,直到子線程銷燬。

  5. ThreadLocal線程隔離的實現機制。
    ThreadLocal可讓線程持有線程獨有的變量,內部原理是Thread類中有一個Map,存儲着全部ThreadLocal變量,以ThreadLocal字段實例爲Key。全部不一樣的線程會有不一樣的ThreadLocal變量值。

第四章 Lock的使用

  1. ReentrantLocksynchronized的對比。
    lock()unlock()方法對對應synchoronized的同步區。

  2. ConditionObject中的鎖模型對比。
    await()對應wait()signal()/signalAll()對應notify()/notifyAll()

  3. 公平鎖與非公平鎖。
    公平鎖表示獲取鎖是按加鎖的順序分配的,也就是FIFO,非公平鎖就是按隨機獲取。

  4. tryLock()awaitUntil()等獨有方法。
    tryLock()做用是隻有在沒其餘線程持鎖的狀況纔去獲取鎖。awaitUntil()是指等待到某個時間點。

  5. ReentrantReadWriteLock的讀寫排斥規則。
    讀寫鎖的規則是讀讀共享,寫寫互斥,讀寫互斥,寫讀互斥。

第五章 定時器 Timmer

  1. 定時器過時調度規則。
    當計劃時間早於當前時間時,定時器會馬上執行,若是晚於當前時間,會等待到計劃時間再執行。

  2. scheduleAtFixedRate()的間隔時間規則與過時補償調度。
    scheduleAtFixedRate()schedule()方法不一樣,一是在計算下次執行時間,後者是本次任務的開始時間+時間間隔得出,前者是使用嚴格按初始時間+時間間隔得出,因此當前時間比計劃時間要晚的時間,調試器會「補上」從初始時間到當前時間沒有執行的任務。

第六章 單例模式與多線程

  1. 六種單例模式。
    有經典餓漢模式、靜態代碼塊模式、靜態內部類模式、枚舉模式、經典懶漢模式、DCL同步代碼模式。

  2. 懶漢模式與可能出現的同步問題及解決方法。
    懶漢模式就是延遲加載,但在多線程情景下,可能會出現多個實例。可使用synchronized同步方法,或者用雙重檢查鎖機制解決這個問題。

第七章 拾遺增補

  1. 線程六種狀態,和狀態之間的轉換。
    線程有NEWRUNNABLEBOLOCKEDWAITINGTIMED_WAITINGTERMINATED六種狀態。

  2. 線程組相關知識:自動歸屬、多級關聯、中止等。
    當線程建立時,若是沒有指定所屬線程組,他會自動歸屬到當前線程所在的線程組。線程組以前能夠多級關聯造成線程樹。

  3. 線程與線程組異常處理。
    線程與線程組可以使用UncaughtExceptionHandleruncaughtException處理相關的異常,沒必要在run()中處理。若是run()中有try-catchuncaughtException就不會被調用。

相關文章
相關標籤/搜索