---------------------- ASP.Net+Android+IOS開發 、 .Net培訓
期待與您交流! ----------------------
1. 線程間通信:多個線程處理同一資源,但是任務卻不同
2. 等待喚醒機制涉及的方法
wait()方法:讓線程處於凍結狀態,這時的線程會釋放cpu的執行權和執行資格。被wait的線程會被存儲到線程池中
notify()方法:喚醒線程池中的一個線程(任意)
notifyAll()方法:喚醒線程池中的所有線程
注意:
(1)這些方法都必須定義在同步中
因爲這些方法是用於操作線程狀態的方法
(2)必須要明確到底操作的是哪個鎖上的線程
3. 爲什麼操作線程的方法wait notify notifyAll定義在了Object類中
因爲這些方法是監視器的方法,監視器其實就是鎖,鎖可以是任意的對象,任意對象調用的方法一定定義在Object類中
4. 同步代碼塊:對於鎖的操作是隱式的
5. jdk1.5以後將同步和鎖封裝成了對象,並將操作鎖的隱式方式定義到了該對象中,將隱式動作變成了顯示動作
6. lock位於java.util.concurrent.locks包中
7. ReentrantLock是實現了lock接口的子類
8. 一個鎖上只能有一組監視器,這組監視器即監視生產者又監視消費者,這組監視器能將生產者和消費者全都wait,也能將生產者和消費者全都喚醒。
解決以上問題的辦法是:創建2組監視器,分別用於監視生產者和消費者
9. Lock接口和Condition接口的區別
Lock接口:替代了同步代碼塊或同步函數。將同步的隱式鎖操作變成現實鎖操作。同時更爲靈活,可以一個鎖上加上多組監視器。
lock():獲取鎖
unlock():釋放鎖,通常需要定義在finally代碼塊中
Condition接口:替代了Object中的wait notify notifyAll方法
將這些監視器方法單獨進行了封裝,變成Condition監視器對象,可以和任意鎖進行組合。
Condition中的方法:
await(); signal(); signalAll();
10. 在同步代碼塊中只能有一個線程執行
11. wait和sleep的區別
(1) wait可以指定時間也可以不指定時間;sleep必須指定時間
(2) 在同步中時,對cpu的執行權和鎖的處理不同
wait:釋放執行權,釋放鎖
sleep:釋放執行權,不釋放鎖
12. interrupt:讓線程的凍結狀態清除掉,讓線程恢復到具備cpu執行資格的狀態
---------------------- ASP.Net+Android+IOS開發 、 .Net培訓 期待與您交流! ----------------------
詳細請查看:http://edu.csdn.net