java線程同步問題的總結

1. 每一個java對象都對應一把對象鎖(或者叫controller),每一個java類也對應一把類鎖。對象鎖用於控制對象的synchronized方法,該對象的所有對象同步方法共用一把對象鎖。類鎖用於控制類的synchronized方法,也就是static synchronized方法,一個類的所有靜態同步方法同受一把類鎖的控制。所有非synchronized的方法不受鎖的控制.對象同步方法被執行時,執行的線程必須先獲得對象鎖,類同步方法被執行時,執行的線程必須先獲得類鎖
2. 鎖的釋放途徑:1) 同步方法執行完畢 2) 同步方法調用wait(),放棄對鎖的控制,自己進入休眠狀態
3. 鎖的獲取途徑:線程處於等待狀態,鎖處於空閒狀態。處於休眠狀態的線程是不能獲得鎖的。
4. 函數notify()用於喚醒第一個調用wait()進入休眠的線程。函數notifyAll()用於喚醒所有調用wait()進入休眠的線程。
5. synchronized(object) { ... } 用於同步{}之間的代碼塊。此時的控制鎖是object對應的對象鎖
6. 根據5, void myFunction() { synchronized(this) { ... } } 和 synchronized void myFunction() {} 起的作用是一樣的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章