天天看點

《Java并發程程式設計藝術》重點總結

  • synchronized修飾的代碼塊同步執行,不在synchronized塊中的代碼會異步執行,是以推薦用同步代碼塊,而非同步整個方法。
  • synchronized修飾同步方法和代碼塊,一定是排隊運作的(線程獨占)。
  • 多線程通路“共享變量”,才需要加同步。
  • 同步不能繼承。
  • 當一個線程執行的代碼出現異常,其持有的鎖會自動釋放。
  • synchronized加到static方法上是給Class類上鎖。
  • synchronized加到執行個體方法上,是給對象上鎖。
  • String常量池緩存,synchronized代碼塊加鎖一般不使用String。
  • synchronized代碼塊具有volatile同步變量到主記憶體的功能。
  • wait()和notify()都是在同步方法、代碼塊中使用。
  • 執行notify()後不會立即釋放對象鎖,等執行完synchronized代碼塊才釋放,然後其他wait狀态的線程才可以獲得該對象鎖。
  • 線程間通信,可使用管道位元組流、管道字元流;建立通信的管道兩端,都是阻塞的,即寫端無寫入時,讀端将會阻塞。類似于
  • Linux程序通信的pipe。

    PipeInputStream/PipeOutputStream

    PipeReader/PipeWriter

  • ReentrantReadWriteLock 具有讀和寫兩個鎖;讀讀共享鎖、寫寫排他鎖、讀寫排他鎖(有寫 就互斥)。