using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace Queue_T_Sample { public class Document { private string title; public string Title { get { return title; } } private string content; public string Content { get { return content; } } public Document(string title, string content) { this.title = title; this.content = content; } } public class DocumentManager { private readonly Queue documentQueue = new Queue(); 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 ProcessDocument { protected ProcessDocument(DocumentManager dm) { documentManager = dm; } private DocumentManager documentManager; protected void Run() { while (true) { if (documentManager.IsDocumentAvailable) { Document doc = documentManager.GetDocument(); Console.WriteLine("Processing document {0}", doc.Title); } else { break; } Thread.Sleep(new Random().Next(20)); } } public static void Start(DocumentManager dm) { //new Thread(new ProcessDocument(dm).Run).Start(); ProcessDocument pd = new ProcessDocument(dm); ThreadStart ts = new ThreadStart(pd.Run); new Thread(ts).Start(); } } class Program { static void Main(string[] args) { DocumentManager dm = new DocumentManager(); ProcessDocument.Start(dm); for (int i = 0; i < 500; i++) { Document doc = new Document("Doc " + i.ToString(), "content"); dm.AddDocument(doc); Console.WriteLine("added document {0}", doc.Title); Thread.Sleep(new Random().Next(20)); } } } }
泛型Queue多线程读写文档
最新推荐文章于 2023-12-15 16:47:28 发布