// 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/