摘自网上描述语段:
Google Collections中的MapMaker融合了Weak Reference,线程安全,高并发性能,异步超时清理,自定义构建元素等强大功能于一身。
常阅读优秀源代码的童鞋都知道,一般叫Maker的对象都是Builder模式,而这个MapMaker就是来”Build“Map的.
一、google collection工具包的MapMaker使用:
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
|
public
static
void
main(String[] args) {
/**
* expiration(3, TimeUnit.SECONDS)设置超时时间为3秒
*/
ConcurrentMap<String , String> map =
new
MapMaker().concurrencyLevel(32).softKeys().weakValues()
.expiration(3, TimeUnit.SECONDS).makeComputingMap(
/**
* 提供当Map里面不包含所get的项,可以自动加入到Map的功能
* 可以将这里的返回值放到对应的key的value中
*/
new
Function<String, String>() {
public
String apply(String s) {
return
"creating "
+ s +
" -> Object"
;
}
}
);
map.put(
"a"
,
"testa"
);
map.put(
"b"
,
"testb"
);
System.
out
.println(map.
get
(
"a"
));
System.
out
.println(map.
get
(
"b"
));
System.
out
.println(map.
get
(
"c"
));
try
{
// 4秒后,大于超时时间,缓存失效。
Thread.sleep(4000);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
System.
out
.println(map.
get
(
"a"
));
System.
out
.println(map.
get
(
"b"
));
System.
out
.println(map.
get
(
"c"
));
}
|
结果如下:
1
2
3
4
5
6
|
testa
testb
creating c -> Object
creating a -> Object
creating b -> Object
creating c -> Object
|
二、先看下其api的相关demo片段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// 使用案例:存储验证码
// <String, String> == <用户唯一,验证码>
// expiration(15, TimeUnit.MINUTES) 有效期15分钟
ConcurrentMap<String,String> capthcaMap =
new
MapMaker().expiration(15, TimeUnit.MINUTES).makeMap();
// 设置ConcurrentMap的concurrencyLevel参数 ,例如ConcurrentHashMap是用来控制其Segment数组的大小
ConcurrentMap<String,Object> map1 =
new
MapMaker().concurrencyLevel(8).makeMap();
// 构造各种不同reference作为key和value的map
ConcurrentMap<String,Object> map2 =
new
MapMaker().softKeys().weakValues().makeMap();
// 提供当Map里面不包含所get的项,可以自动加入到Map的功能
ConcurrentMap<String,Integer> map3 =
new
MapMaker()
.makeComputingMap(
new
Function<String, Integer>() {
public
Integer apply(String key) {
return
1;
}
}
);
|
可以看出过了4秒后,缓存失效,所以呈现如此结果。