**中為了效率一般會構建快取來提高效能 減少不必要的計算。
一般情況下會通過構建乙個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 ...