六 c# 多线程研究 线程间通信
2009-10-27 11:40
585 查看
using System;
using System.Text;
using System.Threading;
namespace ThreadTest
{
class Program
{
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);
}
}
}
using System.Text;
using System.Threading;
namespace ThreadTest
{
class Program
{
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);
}
}
}
相关文章推荐
- java多线程线程通信——生产者和消费者
- C# 如何让 多线程中每个线程间隔毫秒执行同一个方法
- iOS开发多线程创建及线程间通信
- Java多线程:线程间通信之Lock
- C#中的线程(三) 使用多线程
- [C#通信二]C#.net同步异步SOCKET通讯和多线程总结1(转)
- 多线程——线程间通信{wait(); notifyAll();}
- Java多线程与并发应用-(3)-传统线程通信技术及生产者消费者模式
- Java多线程与并发应用-(4)-传统线程通信技术试题
- 多线程__【线程间通信】【等待唤醒机制】【多生产多消费】【Lock&Condition接口】
- Android多线程研究(1)——线程基础及源码剖析
- Android多线程研究(1)——线程基础及源代码剖析
- Java多线程(3)——线程间通信
- C#通过接口与线程通信(捕获线程状态)介绍
- C#多线程,暂停线程(ManualResetEvent)
- java多线程之线程间的通信方式
- Java多线程基础——线程间通信
- 多线程 - 05.线程间的基础通信操作
- JAVA多线程之线程间的通信方式
- java多线程学习之创建线程与线程间通信