一、队列的介绍
1. 队列是为了防止多用户并发会引发的异常,当多名用户同时处理一件事情的时候,就会造成数据混乱,那么为了防止这种,就要用到队列。并且队列一般是和多线程结合使用的。以及必要时将该类设置成单例模式。就是作为程序的唯一入口。
二、 队列的定义:
1. 第一种方式:
using System; using System.Collections; namespace CollectionsApplication { class Program { static void Main(string[] args) { Queue q = new Queue(); q.Enqueue('A'); q.Enqueue('M'); q.Enqueue('G'); q.Enqueue('W');
Console.WriteLine("Current queue: "); foreach (char c in q) Console.Write(c + " "); Console.WriteLine(); q.Enqueue('V'); q.Enqueue('H'); Console.WriteLine("Current queue: "); foreach (char c in q) Console.Write(c + " "); Console.WriteLine(); Console.WriteLine("Removing some values "); char ch = (char)q.Dequeue(); Console.WriteLine("The removed value: {0}", ch); ch = (char)q.Dequeue(); Console.WriteLine("The removed value: {0}", ch); Console.ReadKey(); } } }
运行结果如下:
2. 第二种定义的方式:为队列指定类型,如下指定了一个类的类型。并且在执行过程中,需要判断队列是否大于0,如果大于0说明有值,否则说明没有值
public Queue<ViewModelContent> queue = new Queue<ViewModelContent>(); //此处不需要修改的方法,因为是执行过程是先删后添加 /// <summary> /// 向队列中添加数据 /// </summary> /// <param name="id"></param> /// <param name="title"></param> /// <param name="content"></param> public void AddQueue(int id, string title, string content) { ViewModelContent viewModel = new ViewModelContent(); viewModel.Id = id; viewModel.Title = title; viewModel.Content = content; viewModel.LuceneTypeEnum = LuceneTypeEnum.Add; queue.Enqueue(viewModel); } /// <summary> /// 要删除的数据 /// </summary> /// <param name="id"></param> public void DeleteQueue(int id) { ViewModelContent viewModel = new ViewModelContent(); viewModel.Id = id; viewModel.LuceneTypeEnum = LuceneTypeEnum.Delete; //将要删除的数据放在队列中 queue.Enqueue(viewModel); } /// <summary> /// 开始一个线程 /// </summary> public void StartThread() { Thread thread = new Thread(WriteIndexContent); thread.IsBackground = true; thread.Start(); } /// <summary> /// 检查队列中是否有数据,如果有数据获取。 /// </summary> private void WriteIndexContent() { while (true) { if (queue.Count > 0) { CreateIndexContent(); } else { Thread.Sleep(3000); } } }