通過FutureTask構建快取

2021-10-01 08:14:17 字數 1323 閱讀 2036

**中為了效率一般會構建快取來提高效能 減少不必要的計算。

一般情況下會通過構建乙個hashmap來儲存快取

比如:

map

map =

newhashmap

<

>()

;public

void

test

(object param)

else

}

但是在多執行緒環境下hashmap會出現死迴圈等問題所以可以採用concurrenthashmap。

接下來問題又來了,在多執行緒環境下會出現』判斷-取值『帶來的問題,如果第』1『步的計算是個十分耗時的計算就會造成大量的效能浪費。所以可以加個鎖:

map

map =

newhashmap

<

>()

;public

synchronized

void

test

(object param)

else

}

雖然解決了出現多餘計算的可能性,但是併發效能又大幅下降,所以不可取。

回過頭來,我們主要的問題是在複雜的計算過程中,其他執行緒會直接突破

」if (map中不存在param為key的快取)「這一條件,那麼如果可以在計算前就去告訴其他執行緒 』我正在執行『這個資訊就行了 這時候可以借用futuretask

/**

* @author: hzc

* @date: 2019/11/29 10:33

* @description: taskfuture實現高效能安全的快取

*/public

class

future);

futuretask

oldtask = cache.

putifabsent

(param, futuretask)

;//存入成功執行

if(oldtask == null)

//存入失敗不執行 下乙個迴圈會跳出

}else

}try

catch

(interruptedexception e)

catch

(executionexception e)

}public

static

void

main

(string[

] args)};

for(

int i =

0; i <

10; i++)}

}

通過dockerfile構建nginx

上次 利用命令列的形式來構建nginx服務,這次利用dockerfile檔案來構建nginx服務,其實差不多的,學習下 dockerfile的指令即可。1.建立dockerfile檔案 vim dockerfile2.編寫指令 1 first dockerfile23 from ubuntu lat...

iOS通過URL構建UIImage

很多時候我們只能得到乙個url,然後需要構建乙個uiimage。通常情況下,我們一般都是通過sdwebimage來直接構建uiimageview的image,如何用url直接構建uiimage呢?如下轉換 nsdata data nsdata datawithcontentsofurl nsurl ...

iOS通過URL構建UIImage

很多時候我們只能得到乙個url,然後需要構建乙個uiimage。通常情況下,我們一般都是通過sdwebimage來直接構建uiimageview的image,如何用url直接構建uiimage呢?如下轉換 nsdata data nsdata datawithcontentsofurl nsurl ...