队列的使用 先进先出的原则

/*
队列的使用 先进先出的原则
*/
using System.Threading;
using System.Collections.Generic;

namespace Frank
{
	public class Test
    {
		//程序入口
        public static void Main(string[] args)
        {
			DocumentManager dm = new DocumentManager();
			ProcessDocuments.Start(dm);
			for(int i = 0;i<100;i++)
			{
				Document doc = new Document("Doc"+i,"content"+i);
				dm.AddDocument(doc);
				System.Console.WriteLine("Add"+doc.Title);
				Thread.Sleep(new System.Random().Next(20));
			}
        }
	}
	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
	{
		private readonly Queue<Document> documentQueue = new Queue<Document>();
		public void AddDocument(Document doc)
		{
			lock(this)
			{
				documentQueue.Enqueue(doc);
			}
		}
		public Document GetDocument()
		{
			Document doc = null;
			lock(this)
			{
				doc = documentQueue.Dequeue();
			}
			return doc;
		}
		public bool IsDocumentAvailable
		{
			get
			{
				return documentQueue.Count > 0;	
			}
		}
	}
	public class ProcessDocuments
	{
		public static void Start(DocumentManager dm)
		{
			new Thread(new ProcessDocuments(dm).Run).Start();//创建线程取出里面的值
		}
		protected ProcessDocuments(DocumentManager dm)
		{
			documentManager = dm;
		}
		private DocumentManager documentManager;
		protected void Run()
		{
			while(true)
			{
				if(documentManager.IsDocumentAvailable)
				{
					Document doc = documentManager.GetDocument();
					System.Console.WriteLine("Title:{0}",doc.Title);
				}
				Thread.Sleep(new System.Random().Next(20));
			}
		}
	}
}

  

posted on 2013-12-05 10:30  wp456  阅读(540)  评论(0)    收藏  举报

导航