毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> java技术 >> 正文

线程池定时器解决方案

更新时间:2012-6-15:  来源:毕业论文

做一个基于SqlServer2005的BS项目,项目大致要求是这样的,根据数据库中某条信息的处理时间,然后该条信息时间到了,我要将相应的处理结果添加到表中,之前试开发过Windows服务每秒不断的扫描数据库,当发现需要处理的信息,然后添加处理结果,但是这种系统开销太大,目前我考虑的思路是这样的,在信息添加的时候调用 Clr存储过程,通知处理的结束时间,然后我定义线程池,添加定时器,到那个时间之后连接数据库,添加处理的结果到表中,测试发现很占用Cpu哟,只要稍微多点信息,电脑就死机一样,不知道什么原因

最好不要用线程池

不然并发多了 你不好控制并发的定时器对象 容易出错 

你用线程配合CyclicBarrier 来解决 


给你个 用CyclicBarrier 做线程计数器的例子 你自己看看 当线程结束后 才会执行CyclicBarrier 后面的任务

final Counter codeUnderTest = new Counter();
final int numberOfThreads = 20;
final int incrementsPerThread = 10000;
CyclicBarrier entryBarrier = new CyclicBarrier(numberOfThreads + 1);
CyclicBarrier exitBarrier = new CyclicBarrier(numberOfThreads + 1);

Runnable runnable = new Runnable() {
public void run() {
for (int i = 0; i < incrementsPerThread; i++) {
codeUnderTest.increment();
}
}
};
for (int i = 0; i < numberOfThreads; i++) {
new SynchedThread(runnable, entryBarrier, exitBarrier).start();
}
Assert.assertEquals(0, codeUnderTest.value());
entryBarrier.await(); // let threads proceed when all have been started

exitBarrier.await(); // wait for all threads to finish their execution
Assert.assertEquals(numberOfThreads * incrementsPerThread, codeUnderTest.value());

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。