using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;namespace QueueTest
{
class DocumentManager
{
private readonly Queue<Docoument> documentqueue = new Queue<Docoument>();
public void AddDocument(Docoument doc)
{
lock (this)
{
documentqueue.Enqueue(doc);
}
}
public Docoument GetDocument()
{
Docoument doc = null;
lock (this)
{
documentqueue.Dequeue();
}
return doc;
}
public bool IsDocumentVarialable
{ get
{
return documentqueue.Count > 0;
}
}
}
class Docoument
{
private string title;
private string content;
public string Tiltle
{
get { return title; }
}
public string Content
{
get { return content; }
}
public Docoument(string title, string content)
{
this.content = content;
this.title = title;
}
}
class ProcessDocument
{
public static void Start(DocumentManager dm)
{
new Thread(new ProcessDocument(dm).Run).Start();
}
private DocumentManager documentManager;
protected ProcessDocument(DocumentManager dm)
{
documentManager = dm;
}
protected void Run()
{
while (true)
{
if (documentManager.IsDocumentVarialable)
{
Docoument doc = documentManager.GetDocument();
Console.WriteLine("Processing document{0}", doc.Tiltle);
}
else
{
return;
}
Thread.Sleep(new Random().Next(20));
}
}
}
class Program
{
static void Main(string[] args)
{
DocumentManager dm = new DocumentManager();
ProcessDocument.Start(dm);
for (int i = 0; i < 1000; i++)
{
Docoument doc = new Docoument("Doc" + i.ToString(), "content");
dm.AddDocument(doc);
Console.WriteLine("added document{0}", doc.Tiltle);
Thread.Sleep(new Random().Next(20));
}
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Threading;namespace QueueTest
{
class DocumentManager
{
private readonly Queue<Docoument> documentqueue = new Queue<Docoument>();
public void AddDocument(Docoument doc)
{
lock (this)
{
documentqueue.Enqueue(doc);
}
}
public Docoument GetDocument()
{
Docoument doc = null;
lock (this)
{
documentqueue.Dequeue();
}
return doc;
}
public bool IsDocumentVarialable
{ get
{
return documentqueue.Count > 0;
}
}
}
class Docoument
{
private string title;
private string content;
public string Tiltle
{
get { return title; }
}
public string Content
{
get { return content; }
}
public Docoument(string title, string content)
{
this.content = content;
this.title = title;
}
}
class ProcessDocument
{
public static void Start(DocumentManager dm)
{
new Thread(new ProcessDocument(dm).Run).Start();
}
private DocumentManager documentManager;
protected ProcessDocument(DocumentManager dm)
{
documentManager = dm;
}
protected void Run()
{
while (true)
{
if (documentManager.IsDocumentVarialable)
{
Docoument doc = documentManager.GetDocument();
Console.WriteLine("Processing document{0}", doc.Tiltle);
}
else
{
return;
}
Thread.Sleep(new Random().Next(20));
}
}
}
class Program
{
static void Main(string[] args)
{
DocumentManager dm = new DocumentManager();
ProcessDocument.Start(dm);
for (int i = 0; i < 1000; i++)
{
Docoument doc = new Docoument("Doc" + i.ToString(), "content");
dm.AddDocument(doc);
Console.WriteLine("added document{0}", doc.Tiltle);
Thread.Sleep(new Random().Next(20));
}
}
}
}
解决方案 »
- mvc的,很有问题错误是LINQ to Entities 不支持指定的类型成员“Date”。只支持初始值设定项、实体成员和实体导航属性。
- C#中有没有像delphi中lablededit一样的控件,没有的话怎么自制
- 求助datagridview
- 组件注册asembly sucessfully to the cache 已成功,但在asp中无法调用,在创建组件时就提示错误 '80070002'
- 请问,.net安装以后,在新建项目时提示“VC 软件包不可用或未注册”我该怎么办?
- 请教dataadapter.update(dataset)与dataset.acceptchanges或row.acceptchanges有什么本质的区别吗??
- 不是错误的错误
- 急求:Hex2String的代码,我现在有了String2Hex的代码
- 在C#中怎样判断为空
- 如何计算一个表的记录数?
- 急救 无法取到自定义控件内textbox的值,postback后,textbox的值就变成默认值了
- XP中iis5怎样升级到IIS6.0
public Docoument GetDocument()
{
Docoument doc = null;
lock (this)
{
documentqueue.Dequeue();
}
return doc;
}
没用过那个Dequeue()的方法,不知道它在干什么。但是,这个Get方法返回的好象只是个空值而不是你想要的Document吧。