zoukankan      html  css  js  c++  java
  • 集合-队列

    队列:先进先出的集合结构。类似于List<T>,容量也是根据需要成倍的增加。

    public class Queue<T> : IEnumerable<T>, ICollection, IEnumerable

    //Document文档类;DocumetManger文档控制类,用于添加文档,获取移除文档;ProcessDocuments

    类用于在单独的一个线程中处理队列中的文档。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    namespace AbstractN
    {
        public class Document
        {
            public string Title { get; private set; }
            public string Content { get; private set; }
            public Document(string title, string content)
            {
                this.Title = title;
                this.Content = content;
            }
        }
    
        public class DocumentManager
        {
            Queue<Document> docs = new Queue<Document>();
            public void AddDocument(Document document)
            {
                lock (this)
                {
                    docs.Enqueue(document);
                }
            }
            public Document GetDocument()
            {
                Document doc = null;
                lock (this)
                {
                    doc = docs.Dequeue();
                }
                return doc;
            }
            public bool isHavDoc()
            {
                return docs.Count > 0;
            }
        }
    
        public class ProcessDocument
        {
            private DocumentManager documentManager;
            protected ProcessDocument(DocumentManager dm)
            {
                this.documentManager = dm;
            }
            protected void Run()
            {
                while (true)
                {
                    if (documentManager.isHavDoc())
                    {
                        Document doc = documentManager.GetDocument();
                        Console.WriteLine("文档标题为:{0}", doc.Title);
                    }
                    Thread.Sleep(new Random().Next(20));
                }
            }
            public static void Start(DocumentManager dm)
            {
                new Thread(new ProcessDocument(dm).Run).Start();
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                DocumentManager dm = new DocumentManager();
                ProcessDocument.Start(dm);
                for (int i = 0; i < 100; i++)
                {
                    dm.AddDocument(new Document("Title" + i.ToString(), "Content" + i.ToString()));
                    Console.WriteLine("增加文档:" + i.ToString());
                    Thread.Sleep(new Random().Next(20));
                }
                Console.Read();
            }
        }
    }
  • 相关阅读:
    TOP 100 SOFTWARE VENDORS (ZZ)
    数列总结函数——取余分析
    科克曼女生问题
    约瑟夫问题(猴子选王)——多种解法
    乒乓球与羽毛球不同发球规则下选手的胜率——概率论+程序分析
    Codeblocks快捷键
    常用陌生快捷键
    Dev使用技巧
    vueDemo补充
    vueDemo
  • 原文地址:https://www.cnblogs.com/hometown/p/3205632.html
Copyright © 2011-2022 走看看