Java基礎知識 八

2021-08-17 20:49:45 字數 1024 閱讀 7880

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.繼承 繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用...