jacheut -
談談HashMap的一些問題
hashMap在多線程環境下的表現
在jdk1.7中多線程put時可能會導致get無限循環,具體表現為CPU使用率100%;
該方法實現的機制就是將每個鏈表轉化到新鏈表,並且鏈表中的位置發生反轉,而這在多線程情況下是很容易造成鏈表迴路,從而發生 get() 死循環。所以只要保證建新鏈時還是按照原來的順序的話就不會產生循環(JDK 8 的改進)。即在jdk1.7是採用的頭插法,在jdk1.8使
hashmap
,
JAVA
jacheut -
談談時間輪算法
Kafka、Dubbo、ZooKeeper、Netty、Caffeine、Akka 中都有對時間輪的實現。
時間輪簡單來説就是一個環形的隊列(底層一般基於數組實現),隊列中的每一個元素(時間格)都可以存放一個定時任務列表。
時間輪中的每個時間格代表了時間輪的基本時間跨度或者説時間精度,假如時間一秒走一個時間格的話,那麼這個時間輪的最高精度就是 1 秒(也就是説 3 s 和 3.9s 會在同一個時間
定時任務
,
算法
jacheut -
JAVA IO流簡介
1. IO流概述
IO,即in和out,也就是輸入和輸出,指應用程序和外部設備之間的數據傳遞,常見的外部設備包括文件、管道、網絡連接。
流(Stream),是一個抽象的概念,是指一連串的數據(字符或字節),是以先進先出的方式發送信息的通道。
關於流的特性有下面幾點:
1.先進先出:最先寫入輸出流的數據最先被輸入流讀取到。
2.順序存取:可以一個接一個地往流中寫入一串字節,讀出時也將按寫
JAVA
,
io