泛型Queue多线程读写文档

 
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));
      }      
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值