黑馬程序員 線程(3)

---------------------- 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.   waitsleep的區別

(1)    wait可以指定時間也可以不指定時間;sleep必須指定時間

(2)    在同步中時,對cpu的執行權和鎖的處理不同

wait:釋放執行權,釋放鎖

sleep:釋放執行權,不釋放鎖

12.   interrupt:讓線程的凍結狀態清除掉,讓線程恢復到具備cpu執行資格的狀態

---------------------- ASP.Net+Android+IOS開發 、 .Net培訓 期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net

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