JDK8中的鎖優化

2021-09-20 07:14:33 字數 631 閱讀 2779

參考:

longadder 類似automiclong, 但是提供了「熱點分離」。過程如下:如果併發不激烈,則與automiclong 一樣,cas賦值。如果出現併發操作,則使用陣列,陣列的各元素之和為真實value,讓操作分散在陣列各個元素上,把併發操作壓力分散,一遇到併發就擴容陣列,最後達到高效率。一般cas如果遇到高併發,可能一直賦值失敗導致不斷迴圈,熱點分離可以解決這個問題。有點類似concurrenthashmap,分而治之。

completablefuture 對future進行增強,支援函式式程式設計的流式呼叫。提供更多功能,壓縮編碼量。

stampedlock 改進讀寫鎖,讀不阻塞寫。如果讀的時候,發生了寫,應該重新讀,不是阻塞寫。解決了一般讀寫鎖讀太多導致寫一直阻塞的問題,讀執行緒發現資料不一致時觸發重新讀操作。 原理是維護了乙個stamp標記,在新增寫鎖的釋放寫鎖的時候,stamp都會改變(比如++),**在加讀鎖的時候,可以先得到stamp,讀完資料釋放讀鎖的時候,呼叫validate方法,檢驗剛才stamp和現在stamp是否相同,如果相同,說明讀的過程中沒有修改,讀取成功,如果不相同,則說明讀的時候發生了寫,那麼接下來兩種策略,乙個是繼續用當前stamp為初試,繼續讀,讀完比較stamp,是樂觀的辦法;另一種直接呼叫readlock(),公升級為正常的讀鎖,是悲觀辦法。

JDK8中LocalDate的方法

getyear int 獲取當前日期的年份 getmonth month 獲取當前日期的月份物件 getmonthvalue int 獲取當前日期是第幾月 getdayofweek dayofweek 表示該物件表示的日期是星期幾 getdayofmonth int 表示該物件表示的日期是這個月第幾...

jdk8中forEach使用問題

實話說,jdk8出來好久了,公司一直用的還是jdk7,沒有公升級,最近終於公升級到jdk8了,所以來自己改改 使用jdk8中的新特性,最簡單的foreach先來試試 測試 如下 public static void testjdk8foreach 2 jdk8 foreach aslist.fore...

JDK8中介面的變化

package cn.king.demo01 介面 inte ce myinter01 介面中的 static方法 只能使用 介面名.靜態方法名 的方式呼叫 static void fun2 實現類 class myinter01impl implements myinter01 測試 public...