googleCollection 地图 定时清除数据
googleCollection map 定时清除数据
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>