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