队列的使用 先进先出的原则
/* 队列的使用 先进先出的原则 */ 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)); } } } }