首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

准确读取与设置缓存方法

2013-08-01 
正确读取与设置缓存方法null??????}??}??? ? ? ?经过测试,使用这种方法读取与设置缓存,比使用synchronize

正确读取与设置缓存方法
null;??

  • ????}??
  • }??

    ? ? ? ?经过测试,使用这种方法读取与设置缓存,比使用synchronized方法和锁定键值的方法要快3-10倍,不信大家可以试试。

    ? ? ? ? 有人可能有疑问,如果并发的线程很多,同时都没有命中缓存,那么不就会产生很多Callable<Object>对象吗?这样岂不会浪费很大内存吗?其实,我们仔细分析一下代码,可以看到Callable对象不管创建了多少,但最终经过putIfAbsent方法之后,就留下了一个有效的对象,其他的对象都成为失效对象,随时可以被GC掉。因此,使用这种方法,并不会造成JVM的内存溢出。

    ? ? ?另外,Callable<Object>就是一个普通的对象,跟线程一点关系都没有,里面虽然包括了一个runnable方法,但是并不是说这个会启动一个线程。里面的runnable方法在本代码中是在调用者线程中执行,但执行结果共享给了其他没有命中缓存的线程。

    ? ? ? ? 赶紧回去review你们项目的代码吧,你们设置缓存的方式对吗?

    ? ? ? ? 实际上这个TaskUtil的方法只是使用了两个重要的并发工具类,一个是ConcurrentMap,主要支持并发中经常使用的putIfAbsent方法,和一个FutureTask对象,这个对象的get方法能够阻塞调用者线程,直到结果可用。

    ?

    ?

    对这类话题感兴趣?欢迎发送邮件至donlianli@126.com

    ?

    关于我:邯郸人,擅长Java,Javascript,Extjs,oracle sql。

    ?

    更多我之前的文章,可以访问:http://hi.baidu.com/donlian

  • 热点排行