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