dotNET

用线程队列解决多线程并行问题

2017-02-23  本文已影响0人  czly

多线程并发,可能会造成死锁问题,因此,我们可将多线程操作放入队列中。以下,是我实现的一个简单线程队列操作类。
<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>

上一篇 下一篇

猜你喜欢

热点阅读