24.執行緒的應用
1.等待之後超時
while(結果未返回 && 時間未到)
wait();
2.執行緒池
要有佇列,狀態
worker實現runnable介面,迴圈從jobs佇列取任務執行,獲取不到就wait();
execute(job job)時,喚醒jobs
3.基於執行緒池web伺服器
思路:開乙個socket服務,每次accept後,把這個一對一服務放封裝成job類,放到jobs佇列裡
|--locksupport
工具類,有park、unpark阻塞喚醒執行緒
|--condition
相當於lock中的wait和notify,區別是wait等待佇列只能有乙個,condition可以有多個
condition佇列類似於aqs佇列
每個condition下面有乙個等待await的等待佇列
lock.newcondition()獲取condition
lock.await(); = wait
lock.singal();=notify
|--concurrenthashmap
問題:hashmap執行緒不安全導致entry鍊錶程式設計環,引發死迴圈。
hashtable效率低
解決:segment包含hashentry陣列
segment是一種可重入鎖(reentrantlock)
實現:segment數量是2的n次方,預設16
每乙個segment的容量=每個segment裡hashentry*負載因子
如何放入資料:再雜湊確保資料分散後放入segment
get方法:不加鎖,而是用volatile
1.8更新:沒有了segment,橫向用node鍊錶替代,node被呼叫取時就synchronize加鎖。當沒node底下鍊錶超過8個,將加鎖
4.concurrentlinkedqueue
非阻塞入隊:定位尾節點,不成功cvs重試(為了減少cvs,控制尾節點更新頻率)
出隊:
基礎知識《八》 Java反射機制
1.反射可以做什麼 2.反射相關的api 3.獲取class執行時類的例項的三種方法 1 通過執行時類本身的.class屬性 class clazz person.class 2 通過執行時類的物件獲取 person p new person class clazz p.getclass 3 通過c...
java 基礎知識
1.複製。賦值操作。就是先將其本身加乙個變數再賦值給其本身。如a b就是a a b 2.比較兩個值或者說是位址是否相同 指向同乙個物件 和 或 3.操作符是if else操作的縮寫,如果 右邊判斷為true則返回 左邊的計算結果。右邊錯誤,返回 右邊的計算結果。在class09裡面有例子。4.流程控...
Java基礎知識
1 物件導向的特徵有哪些方面 1.抽象 抽象就是忽略乙個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。2.繼承 繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用...