ThreadPool的一些疑问
数据库中有一张A表。如果有要处理的订单数据就会进入到A表,我需要每隔几秒就查下有要处理的订单吗。如果使用计时器每隔几秒搜索一次,有要处理的订单就for循环读取数据处理我感觉效率太低,所以就想使用ThreadPool来处理,因为之前没用过,我贴代码大家帮忙看下有哪儿些问题?还有就是如果是调用全局变量的话,线程池里的线程之间会出现混乱吗,就是线程1会读到线程2的变量值吗?
C# code
private void Form1_Load(object sender, EventArgs e)
{
ThreadPool.SetMaxThreads(200, 200);
ThreadPool.SetMinThreads(100, 100);
TimerCallback timerDelegate = new TimerCallback(test);
System.Threading.Timerime = new System.Threading.Timer(timerDelegate, this, 0, 5000);
}
public void test(object obj)
{
ThreadPool.QueueUserWorkItem(delegate(object obj1)
{
deal();
Thread.Sleep(1000);
});
}
public void deal()
{
//一次性读取表里top20的数据进行业务处理
}
------解决方案--------------------
如果只是轮询的话,直接用 Timer 就可以了,timer本身就是在子线程里。
你起一个线程轮询还是多线程轮询,在增量少的时候,没什么区别。
------解决方案--------------------
用ThreadPool的时候,如果是用全局变量的话,注意在每个Thread操作变量的时候加锁,操作完毕之后解锁就行了。
------解决方案--------------------
System.Threading.Timer本身就是在内部使用线程池,所以没有必要在回调中使用 ThreadPool.QueueUserWorkItem
我的看法是在回调中查询表A,如果结果的行数>0,则在循环加将每个任务使用ThreadPool.QueueUserWorkItem去操作。