天天看點

google collection工具包的MapMaker使用

摘自網上描述語段:

google collections中的mapmaker融合了weak reference,線程安全,高并發性能,異步逾時清理,自定義建構元素等強大功能于一身。

常閱讀優秀源代碼的童鞋都知道,一般叫maker的對象都是builder模式,而這個mapmaker就是來”build“map的.

一、google collection工具包的mapmaker使用:

<a href="http://www.bysocket.com/?p=834#">?</a>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<code>public</code> <code>static</code> <code>void</code> <code>main(string[] args) {</code>

<code>        </code><code>/**</code>

<code>         </code><code>* expiration(3, timeunit.seconds)設定逾時時間為3秒</code>

<code>         </code><code>*/</code>

<code>        </code><code>concurrentmap&lt;string , string&gt; map =</code><code>new</code> <code>mapmaker().concurrencylevel(32).softkeys().weakvalues()</code>

<code>                </code><code>.expiration(3, timeunit.seconds).makecomputingmap(</code>

<code>                        </code><code>/**</code>

<code>                         </code><code>* 提供當map裡面不包含所get的項,可以自動加入到map的功能</code>

<code>                         </code><code>* 可以将這裡的傳回值放到對應的key的value中</code>

<code>                         </code><code>*/</code>

<code>                        </code><code>new</code> <code>function&lt;string, string&gt;() {</code>

<code>                            </code><code>public</code> <code>string apply(string s) {</code>

<code>                                </code><code>return</code> <code>"creating "</code> <code>+ s +</code><code>" -&gt; object"</code><code>;</code>

<code>                            </code><code>}</code>

<code>                        </code><code>}</code>

<code>                </code><code>);</code>

<code>        </code><code>map.put(</code><code>"a"</code><code>,</code><code>"testa"</code><code>);</code>

<code>        </code><code>map.put(</code><code>"b"</code><code>,</code><code>"testb"</code><code>);</code>

<code>        </code><code>system.</code><code>out</code><code>.println(map.</code><code>get</code><code>(</code><code>"a"</code><code>));</code>

<code>        </code><code>system.</code><code>out</code><code>.println(map.</code><code>get</code><code>(</code><code>"b"</code><code>));</code>

<code>        </code><code>system.</code><code>out</code><code>.println(map.</code><code>get</code><code>(</code><code>"c"</code><code>));</code>

<code>        </code><code>try</code> <code>{</code>

<code>            </code><code>// 4秒後,大于逾時時間,緩存失效。</code>

<code>            </code><code>thread.sleep(4000);</code>

<code>        </code><code>}</code><code>catch</code> <code>(interruptedexception e) {</code>

<code>            </code><code>e.printstacktrace();</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

結果如下:

<code>testa</code>

<code>testb</code>

<code>creating c -&gt; object</code>

<code>creating a -&gt; object</code>

<code>creating b -&gt; object</code>

二、先看下其api的相關demo片段:

<code>// 使用案例:存儲驗證碼</code>

<code>    </code><code>// &lt;string, string&gt; == &lt;使用者唯一,驗證碼&gt;</code>

<code>    </code><code>// expiration(15, timeunit.minutes) 有效期15分鐘</code>

<code>    </code><code>concurrentmap&lt;string,string&gt; capthcamap =</code><code>new</code> <code>mapmaker().expiration(15, timeunit.minutes).makemap();</code>

<code>    </code><code>// 設定concurrentmap的concurrencylevel參數 ,例如concurrenthashmap是用來控制其segment數組的大小</code>

<code>    </code><code>concurrentmap&lt;string,object&gt; map1 =</code><code>new</code> <code>mapmaker().concurrencylevel(8).makemap();</code>

<code>    </code><code>// 構造各種不同reference作為key和value的map</code>

<code>    </code><code>concurrentmap&lt;string,object&gt; map2 =</code><code>new</code> <code>mapmaker().softkeys().weakvalues().makemap();</code>

<code>    </code><code>// 提供當map裡面不包含所get的項,可以自動加入到map的功能</code>

<code>    </code><code>concurrentmap&lt;string,integer&gt; map3 =</code><code>new</code> <code>mapmaker()</code>

<code>            </code><code>.makecomputingmap(</code>

<code>                    </code><code>new</code> <code>function&lt;string, integer&gt;() {</code>

<code>                        </code><code>public</code> <code>integer apply(string key) {</code>

<code>                            </code><code>return</code> <code>1;</code>

<code>                    </code><code>}</code>

<code>            </code><code>);</code>

可以看出過了4秒後,緩存失效,是以呈現如此結果。