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>