问一个简单C#线程问题
public class Document//创建一个表示文件夹的类,属性包括题目和内容
{
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
private string content;
public string Content
{
get { return content; }
set { content = value; }
}
public Document(string newtitle, string newcontent)
{
title = newtitle;
content = newcontent;
}
}
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 > 1;
}
}
}
public class ProcessDocuments //增加一个关于文件夹操作的线程的类
{
public ProcessDocuments(DocumentManager dm)
{
documentManager = dm;
}
private DocumentManager documentManager;
public void Run() //这个方法正好复合ThreadStart这个委托,用来创建线程
{
while(true)
{
if (documentManager.IsDocumentAvailable)
{
Document doc = documentManager.GetDocument();
Console.WriteLine("处理文件:{0}", doc.Title);
}
else
{
Console.WriteLine("队列已经空了,无法处理!");
}
Thread.Sleep(1000);
}
}
}
主函数的代码:
DocumentManager dm = new DocumentManager();
ProcessDocuments p = new ProcessDocuments(dm);
new Thread(p.Run).Start(); //这个我明白,以p.Run这个方法创建一个线程,开始运行这个线程
for (int i = 0; i < 100; i++)
{
Document doc = new Document("Doc" + i.ToString(), "connect");
dm.AddDocument(doc);
Console.WriteLine("加入了文件:{0}", doc.Title);
Thread.Sleep(100);
}
输出:
处理文件XX
创建文件XX
创建文件XX
...
...
我的问题是:根据实际的输出我感觉for循环也是个进程,难道这是个系统默认的?这个我有点不懂,还有就是他们执行的顺序怎么和平时我们运行程序时的运行顺序(就是从主函数一行一行执行的那种)不太一样,按照原来那个应该是先执行完new Thread(p.Run).Start(); 才执行循环,但是现在他们是交叉着执行的,新人求教,我应该说的比较清楚吧。谢谢~