原子迴圈計數器

2021-09-23 21:23:17 字數 1080 閱讀 1907

感謝同事[孫棋]的投稿

現實當中很多場景,需要進行輪訓服務,比如輪訓在10個日誌檔案當中寫日誌,在10臺機器上輪訓的去呼叫以實現負載均衡,常規的做法,如tomcat的poller執行緒輪訓選擇,就採用

1math.abs(pollerrotater.incrementandget()) % pollers.length

此地需要取原子自增的絕對值模以poller執行緒數,那是否有更好的實現呢?

01publicclasscycleatomicinteger

13

14/**

15* 獲取下個原子值

16*

17* @return

18*/

19publicintnext()else

28}

29}

30

31}

這樣就可以快速的實現rr的效果,同時也避免了abs的過程,至於locksupport.parknanos(park_time);加了這個後,4個執行緒執行2億次的計算,我本機從原來的16s減少到4s,至於為什麼要加這個,可參見更快的atomicinteger

當然,這樣設計會存在cas的aba問題,但對當前的case需求,其實是滿足的,也不存在問題

原子迴圈計數器

現實當中很多場景,需要進行輪訓服務,比如輪訓在10個日誌檔案當中寫日誌,在10臺機器上輪訓的去呼叫以實現負載均衡,常規的做法,如tomcat的poller執行緒輪訓選擇,就採用 math.abs pollerrotater.incrementandget pollers.length 此地需要取原子...

實現原子計數器

定義乙個單例模式的物件,宣告乙個原子計數物件 public class singleton private static singleton instance null private singleton public static singleton getinstance return inst...

計數器 智慧型計數器簡介

計數器主要是應用於電子科技領域,計數器是一種運用得比較多的時序邏輯電路。計數器可以對數字進行運算,它是一種沒有辦法顯示計算結果的顯示器。隨著電子科技的不斷發展,現在的計數器也實現了智慧型功能。智慧型計數器的出現幫助我們實現了很多高強度生產問題 複雜的技術問題,並且節約了生產成本和人力成本。智慧型計數...