C# Monitor 使用 多线程通信
代码
using System;
using System.Text;
using System.Threading;
namespace ReadKey
{
class Program3
{
static void Main(string[] args)
{
Student student = new Student();
new Thread(new ThreadStart(new Thread1(student).run)).Start();//添加信息
new Thread(new ThreadStart(new Thread2(student).run)).Start();//读取信息
}
}
/// <summary>
/// 向Student类加添加信息
/// </summary>
public class Thread1
{
private Student student;
public Thread1(Student student)
{
this.student = student;
}
public void run()
{
int i = 0;
while (true)
{
if (i == 0)
student.Add("jxncwzb", 23);
else
student.Add("jxncwzb++", 22);
i = (i + 1) % 2;
}
}
}
/// <summary>
/// 读取Thread1干才添加的信息
/// </summary>
public class Thread2
{
private Student student;
public Thread2(Student student)
{
this.student = student;
}
public void run()
{
while (true)
{
student.GetInfo();
}
}
}
public class Student
{
private string name;
private int age;
private bool isRun = false;
public void Add(string name, int age)
{
Monitor.Enter(this);
if (isRun)
Monitor.Wait(this);
this.name = name;
//Thread.Sleep(10);
this.age = age;
this.isRun = true;
Monitor.Pulse(this);
Monitor.Exit(this);
}
public void GetInfo()
{
Monitor.Enter(this);
if (!isRun)
Monitor.Wait(this);
Console.Write("姓名:" + name);
Console.WriteLine("&年龄:" + age.ToString());
this.isRun = false;
Monitor.Pulse(this);
Monitor.Exit(this);
}
}
}