隊列應用

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);
                }
            }
        }
相關文章
相關標籤/搜索