import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import com.google.common.base.Function;
import com.google.common.collect.MapMaker;
/**
* @author guoliang created GoogleColTestMain.java
* @since 2010-4-28 下午05:48:55
*/
public class GoogleColTestMain {
/**
* @param args
*/
public static void main(String[] args) {
/**
* softKeys weakValues 可以设置key跟value的strong,soft,weak属性。不错不错。
* expiration(3, TimeUnit.SECONDS)设置超时时间为3秒
*
*/
ConcurrentMap<String, String> testMap = new MapMaker()
.concurrencyLevel(32).softKeys().weakValues()
.expiration(3, TimeUnit.SECONDS)
.makeComputingMap(new Function<String, String>() {
/**
* 这里就是绑定的根据key没找到value的时候触发的function,
* 可以将这里的返回值放到对应的key的value中!
*
* @param arg0
* @return
*/
public String apply(String arg0) {
return "create:" + arg0;
}
});
testMap.put("a", "testa");
testMap.put("b", "testb");
System.out.println(testMap.get("a"));
System.out.println(testMap.get("b"));
System.out.println(testMap.get("c"));
/**
* 这里sleep4秒钟过后, 缓存都失效,再get就会根据绑定的function去获得value放在map中了。
*/
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 看看这里的再输出,是不是就是新的值了!~
*/
System.out.println(testMap.get("a"));
System.out.println(testMap.get("b"));
System.out.println(testMap.get("c"));
}
}
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
<version>1.0</version>