感謝同事[孫棋]的投稿
現實當中很多場景,需要進行輪訓服務,比如輪訓在10個日誌檔案當中寫日誌,在10臺機器上輪訓的去呼叫以實現負載均衡,常規的做法,如tomcat的poller執行緒輪訓選擇,就採用
1
math.abs(pollerrotater.incrementandget()) % pollers.length
此地需要取原子自增的絕對值模以poller執行緒數,那是否有更好的實現呢?
01
public
class
cycleatomicinteger
13
14
/**
15
* 獲取下個原子值
16
*
17
* @return
18
*/
19
public
int
next()
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...
計數器 智慧型計數器簡介
計數器主要是應用於電子科技領域,計數器是一種運用得比較多的時序邏輯電路。計數器可以對數字進行運算,它是一種沒有辦法顯示計算結果的顯示器。隨著電子科技的不斷發展,現在的計數器也實現了智慧型功能。智慧型計數器的出現幫助我們實現了很多高強度生產問題 複雜的技術問題,並且節約了生產成本和人力成本。智慧型計數...