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 ProcessDocument
{
private DocumentManager
documentManager;
public static
void Start(DocumentManager dm)
{
new
Thread(new
ProcessDocument(dm).Run).Start();
}
protected
ProcessDocument(DocumentManager
dm)
{
documentManager =
dm;
//Console.WriteLine("初始化完成");
}
protected void
Run()
{
while
(true)
{
if
(documentManager.IsDocumentAvailable)
{
Document doc = documentManager.GetDocument();
//从队列去文档
Console.WriteLine("Processing document从队列中取出文档并删除队列中的文档 {0}",
doc.Title);
Program.WriteLog(string.Format("Processing document 从队列中取出文档并删除队列中的文档 {0}",
doc.Title));
}
Thread.Sleep(new
Random().Next(20));
}
}
}
class Program
{
static void Main(string[]
args)
{
var dm =
new
DocumentManager();
ProcessDocument.Start(dm);
for (int i = 0; i < 1000;
i++)
{
Document doc = new Document(" Doc" + i.ToString(),
"content");
dm.AddDocument(doc);
//添加队列到文档
//Stream stream =
File.Create("console.out.log");
//StreamWriter writer = new
StreamWriter(stream);
//Console.SetOut(writer);
Console.WriteLine("Added document {0}",
doc.Title);
WriteLog(string.Format("Added document
{0}",doc.Title));
//WriteLog
Console.Title =
"队列测试";
}
}
public static void
WriteLog(string str)
{
//string
filePath =
System.Environment.CurrentDirectory.Replace("bin\\Debug","log");
string logPath = (AppDomain.CurrentDomain.BaseDirectory+
@"log\applog.txt").Replace("bin\\Debug\\","");
//string logPath = AppDomain.CurrentDomain.BaseDirectory +
@"log\applog.txt";
FileStream fs = new FileStream(logPath, FileMode.Append, FileAccess.Write,
FileShare.ReadWrite);
//若存改文件则将日志插入到文本末尾,创建一个新文件
using (StreamWriter sw = new
StreamWriter(fs,UnicodeEncoding.UTF8))
{
//lock
(sw)
//{
sw.WriteLine(str);
sw.Close();
//}
}
fs.Close();
}
}
原文:http://www.cnblogs.com/lykbk/p/fthyfrtghfgh4564565465465.html