1. 「非線程安全」問題存在於"實例變量"中,方法內的變量爲線程安全。java
2. 關鍵字synchronized 取得的鎖都是對象鎖。安全
3. 若是多個線程訪問多個對象,則JVM會建立多個鎖。多線程
4. A線程先持有object對象的Lock鎖,B線程能夠異步的方式調用object對象中的非synchronized類型的方法。異步
5. A線程先持有object對象的Lock鎖,B線程若是在這時候調用object對象中的synchronized類型的方法,則須要同步。性能
6. synchronized鎖重入:在使用synchronized時,當一個線程獲得一個對象鎖後,再次請求此對象鎖時是能夠再次獲得該對象的鎖的。這也說明,在一個synchronized方法\塊的內部調用本類的其餘synchronized方法\塊時,是永遠能夠獲得鎖的。this
7. 可重入鎖也支持在父子類繼承的環境中。spa
8. 當存在父子類繼承關係時,子類是徹底能夠經過"可重入鎖"調用父類的同步方法的。.net
9. 當出現異常時,鎖自動釋放。線程
10. 同步不具備繼承性。對象
11. synchronized同步語句塊:synchronized 同步方法在某些狀況下有弊端,在這種狀況下,可使用synchronized同步語句塊來解決。
12. synchronized(this) 使用的"對象監視器"是一個。
13. synchronized還能夠用在static靜態方法上,那是對*.java對應的Class類進行加鎖。
14. String 常量池
15. synchronized代碼塊一般狀況下不適用String做爲鎖對象,由於String常量池帶來的問題。
16. volatile:主要做用是使變量在多個線程間可見。它強制從公共堆棧中取得變量的值,而不是從線程私有數據棧中取得變量的值。
17. volatile變量不支持原子性。
18. synchronized vs volatile
19. 變量在內存中工做過程:
read和load階段:從主存複製變量到當前線程工做內存;
use和asign階段:執行代碼,改變共享變量值;
store和write階段:用工做內存數據刷新主對應變量的值;
20. AtomicInteger, AtomicLong 原子類。可是原子類在具備邏輯的狀況下輸出結果也具備隨機性。
21. synchronized 代碼塊具備volatile同步的功能,synchronized可使具備可視性。