Let's go

C#下队列的使用

案例:借鉴https://www.cnblogs.com/yaopengfei/p/8322016.html

单例模式

 /// <summary>
 /// 单例类
 /// </summary>
 public class QueueUtils
 {
     /// <summary>
     /// 静态变量:由CLR保证,在程序第一次使用该类之前被调用,而且只调用一次
     /// </summary>
     private static readonly QueueUtils _QueueUtils = new QueueUtils();

     /// <summary>
     /// 声明为private类型的构造函数,禁止外部实例化
     /// </summary>
     private QueueUtils()
     {

     }
     /// <summary>
     /// 声明属性,供外部调用,此处也可以声明成方法
     /// </summary>
     public static QueueUtils instanse
     {
         get
         {
             return _QueueUtils;
         }
     }


     //下面是队列相关的
     Queue queue = new Queue();

     private static object o = new object();

     public  int getCount()
     {
         return queue.Count;
     }

     /// <summary>
     /// 入队方法
     /// </summary>
     /// <param name="myObject"></param>
     public void Enqueue(object myObject)
     {
         lock (o)
         {
             queue.Enqueue(myObject);
         }
     }
     /// <summary>
     /// 出队操作
     /// </summary>
     /// <returns></returns>
     public object Dequeue()
     {
         lock (o)
         {
             if (queue.Count > 0)
             {
                 return queue.Dequeue();
             }
         }
         return null;
     }

 }
View Code

出入队操作

int count = 1;
List<Task> taskList = new List<Task>();
for (int i = 0; i < 100; i++)
{
    var task = Task.Run(() =>
    {
        QueueUtils.instanse.Enqueue(count++);
    });
    taskList.Add(task);
}

Task.WaitAll(taskList.ToArray());
//发现队列个数在全是100
Console.WriteLine("单例模式下队列个数" + QueueUtils.instanse.getCount());

//下面是出队相关的业务
while (QueueUtils.instanse.getCount() > 0)
{
    Console.WriteLine("出队:" + QueueUtils.instanse.Dequeue());
}
View Code

 

posted @ 2025-05-19 11:35  chenze  阅读(4)  评论(0)    收藏  举报
有事您Q我