C#多线程(二)——生产者和消费者实例
来源:互联网 发布:淘宝素材图片免费下载 编辑:程序博客网 时间:2024/05/16 10:19
(1) Consumer表示消费类,其中定义了一个ArrayList表示容器,容器中装的是Goods这个类的对象。主要是方法Consumption,这个是表示消费的方法。具体代码如下:
public class Consumer
{
ArrayList container = null;
//得到一个容器
public Consumer(ArrayList container)
{
this.container = container;
}
//定义一个消费的方法
public void Consumption()
{
Goods goods = (Goods)this.container[0];
Console.WriteLine("消费了物品:" + goods.ToString());
//消费掉容器中的一个物品
this.container.RemoveAt(0);
}
}
(2) Producer表示生产类,同样有一个ArrayList表示容器,和Consumer类一样有一个得到容器的构造函数。主要方法是Product,表示生产一个物品的方法,具体代码如下:
public class Producer
{
ArrayList container = null;
//得到一个容器
public Producer(ArrayList container)
{
this.container = container;
}
//定义一个生产物品的方法装入容器
public void Product(string name)
{
//创建一个新物品装入容器
Goods goods = new Goods();
goods.Name = name;
this.container.Add(goods);
Console.WriteLine("生产了物品:" + goods.ToString());
}
}
(3) 接下来看看物品类Goods,这个表示生产者和消费者进行交互的物品,其中就一个属性Name表示名称,同时重写了ToString()方法。具体代码如下:
public class Goods
{
//物品名称
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
//重写ToString()
public override string ToString()
{
return "物品名称:" + name;
}
}
(4) 最后看看我们的Programe类,这个类包含了一个启动的Main函数,其中还有两个方法ThreadConsumption和ThreadProduct。这两个方法是放在两个线程中进行执行的。表示一个线程进行生产,一个线程进行消费。生产线程在生产好一个物品后就通知消费者进行物品的消费,自己便停下等消费者消费完毕后通知生产线程再进行生产。具体代码如下:
class Program
{
//创建一个消费者和生产者共用的一个容器
ArrayList container = new ArrayList();
Producer producer = null;
Consumer consumer = null;
static void Main(string[] args)
{
Program p = new Program();
//创建两个线程并启动
Thread t1 = new Thread(new ThreadStart(p.ThreadProduct));
Thread t2 = new Thread(new ThreadStart(p.ThreadConsumption));
t1.Start();
t2.Start();
Console.Read();
}
//定义一个线程方法生产8个物品
public void ThreadProduct()
{
//创建一个生产者
producer = new Producer(this.container);
lock (this)
{
for (int i = 1; i <= 8; i++)
{
//如果容器中没有就进行生产
if (this.container.Count == 0)
{
//调用方法进行生产
producer.Product(i + "");
//生产好了一个通知消费者消费
Monitor.Pulse(this);
}
//容器中还有物品等待消费者消费后再生产
Monitor.Wait(this);
}
}
}
//定义一个线程方法消费生产的物品
public void ThreadConsumption()
{
//创建一个消费者
consumer = new Consumer(this.container);
lock (this)
{
while (true)
{
//如果容器中有商品就进行消费
if (this.container.Count != 0)
{
//调用方法进行消费
consumer.Consumption();
Monitor.Pulse(this);
}
//容器中没有商品通知消费者消费
Monitor.Wait(this);
}
}
}
}
- C#多线程(二)——生产者和消费者实例
- c# 多线程---生产者和消费者(二)
- c# 多线程--生产者和消费者(一)
- c#多线程 生产者和消费者
- C#多线程------生产者和消费者
- C#多线程--生产者和消费者
- 多线程—生产者于消费者实例
- -java多线程——生产者和消费者
- 多线程:生产者消费者实例
- Linux多线程机制(生产者和消费者实例 )
- javaSE基础编程——多线程(生产者和消费者)
- 多线程经典实例;生产者和消费者
- C#多线程学习(三) 生产者和消费者(转载)
- C#多线程学习(三) 生产者和消费者
- C#多线程学习(三) 生产者和消费者
- C#多线程学习(三) 生产者和消费者
- C#多线程学习(三) 生产者和消费者
- C#多线程学习(三) 生产者和消费者
- net send IP|DOMAIN message
- 跟着thinkphp官方论坛学TP 四
- java ajax
- a correct Divide function
- 开发web打印的一点体会
- C#多线程(二)——生产者和消费者实例
- TDD的好处
- c# 取当前日期是在一年中的第几周
- 集群文件系统测试
- XML文档结构
- epoll介绍
- PHP上传图片并生成缩略图_2
- 免费杀毒软件,革了谁的命 穆利堂-movno1推荐
- 海量空间数据库实施策略-栅格数据 3