• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

将ReadWriteLock应用于缓存设计

发布: 2008-6-26 13:23 | 作者: 不详 | 来源: 测试时代编辑整理 | 查看: 98次 | 进入软件测试论坛讨论

领测软件测试网


        // test FullCache.clearCache():
        Thread clearThread = new Thread() {
                public void run() {
                    for(;;) {
                        cache.clearCache();
                        try {
                            Thread.sleep(DATA_OPERATION * 2);
                        }
                        catch(InterruptedException e) {
                            break;
                        }
                    }
                }
        };
        // start all threads:
        clearThread.start();
        for(Thread t : threads) {
            t.start();
        }
        // wait for all threads:
        for(Thread t : threads) {
            try {
                t.join();
            }
            catch(InterruptedException e) {}
        }
        clearThread.interrupt();
        try {
            clearThread.join();
        }
        catch(InterruptedException e) {}
        // statistics:
        hit.debug();
    }

    private static void doSleep(long n) {
        try {
            Thread.sleep(n);
        }
        catch(InterruptedException e) {}
    }
}
  反复运行JUnit测试,均未报错。统计结果如下:

  Total get: 10000000

  Not hit: 7

  Hits: 99%

  执行时间3.9秒。如果用synchronized取代ReadWriteLock,执行时间为204秒,可见性能差异巨大。

总结:
  接口和实现的分离是必要的,否则难以实现Proxy模式。

  Facade模式和DAO模式都是必要的,否则,一旦数据访问分散在各个Servlet或JSP中,将难以控制缓存读写。

  下载完整的源代码

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

66/6<123456

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网