做一个基于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());