1、隊列的介紹多線程
1. 隊列是爲了防止多用戶併發會引起的異常,當多名用戶同時處理一件事情的時候,就會形成數據混亂,那麼爲了防止這種,就要用到隊列。而且隊列通常是和多線程結合使用的。以及必要時將該類設置成單例模式。就是做爲程序的惟一入口。併發
2、 隊列的定義:spa
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(); } } }
運行結果以下:code
2. 第二種定義的方式:爲隊列指定類型,以下指定了一個類的類型。而且在執行過程當中,須要判斷隊列是否大於0,若是大於0說明有值,不然說明沒有值blog
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); } } }