多线程并发,可能会造成死锁问题,因此,我们可将多线程操作放入队列中。以下,是我实现的一个简单线程队列操作类。
<pre>
/// <summary>
/// 线程队列帮助类
/// </summary>
public class ThreadQueueHelper<T>
{
public delegate void CallHandler(T para);
public CallHandler Execute;
private Queue<T> _queue;
public ThreadQueueHelper()
{
_queue = new Queue<T>();
ThreadPool.QueueUserWorkItem(new WaitCallback(ExecuteQueue));
}
public void AddQueue(T item)
{
_queue.Enqueue(item);
}
public void ClearQueue()
{
_queue.Clear();
}
/// <summary>
/// 执行线程队列
/// </summary>
/// <param name="obj"></param>
private void ExecuteQueue(object obj)
{
while (true)
{
if (_queue.Count > 0)
{
T item= _queue.Dequeue();
Execute(item);
}
System.Threading.Thread.Sleep(1);
}
}
}
</pre>
使用方法如下
<pre>
class ThreadQueueTest
{
private void TestQueue()
{
ThreadQueueHelper<int> QueueOperate = new ThreadQueueHelper<int>();
QueueOperate.Execute += new ThreadQueueHelper<int>.CallHandler(InsertData);
for (int i = 0; i < 100; i++)
{
QueueOperate.AddQueue(i);
}
}
private object obj = new object();
private void InsertData(int i)
{
lock (obj)
{
//insert into db operate
}
}
}
</pre>
网友评论