using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ProduceConsume
{
class Program
{
static void Main(string[] args)
{
// 创建大小为100的数据库连接对象池
MySqlConnection[] connArr = new MySqlConnection[100];
// 数组索引
int index = -1;
// 创建10个消费者
for (int i = 0; i < 10; i++)
{
// 其中的一个消费者
Thread thread = new Thread(() => {
while (true)
{
lock (connArr)
{
if (index >= 0)
{
Console.WriteLine("{0},正在消费第{0}个连接对象...",
Thread.CurrentThread.Name, index);
connArr[index] = null;
index--;
}
else
{
Console.WriteLine("连接对象使用完毕!");
}
}
Thread.Sleep(200);
}
});
thread.Name = "我是消费线程" + i;
thread.IsBackground = true;
thread.Start();
}
// 创建5个生产者
for (int i = 0; i < 5; i++)
{
// 其中的一个生产者
Thread thread = new Thread(() => {
while (true)
{
lock (connArr)
{
if (index < 100)
{
Console.WriteLine("{0},正在生产第{1}个连接对象...",
Thread.CurrentThread.Name, index + 1);
connArr[index + 1] = new MySqlConnection();
index++;
}
else
{
Console.WriteLine("已生产了{0}个连接对象!", index);
}
}
Thread.Sleep(100);
}
});
thread.Name = "我是生产线程" + i;
thread.IsBackground = true;
thread.Start();
}
Console.ReadKey();
}
}
class MySqlConnection
{
public int Id { get; set; }
public string CommandText { get; set; }
public void Open() { }
}
}