续上面几篇
实现线程通讯的例子有很多种,我们这里介绍几个简单的例子给大家看
第二篇我们对线程进行了简单的分工,但是存在一个问题,小B并不知道小A的工作完成了没有,并且小B线程需要在小A的工作完成之后才能接着做下面的工作,但是小A在机子的办公室里懒得出来,他只在办公室里说我的工作完成了,但是小B小C都不知道,小B和小C在自己的办公室里听不到小A说的话(我们把每个线程比作一个独立的办公室),如此下来,小B和小C只能闲置下来,我们想办法要让小B和小C知道小A的工作已经完成了!
老板急了,这个时候需要考虑发工资的问题,让人闲着的话是巨大的人力资源和财力的浪费,老板就想这个时候我们最好的办法就是给成员们的办公室里办个电话,可以互相通电话,电话总机放在我这里,为了避免成员偷懒,我让总机把他们的工作状态都记录下来,给成员们每个动作都进行了侦听,方便高效的考核和发工资。
老板这人比较更懒,想一下上面的方法虽然可以解决他们偷懒的问题,但是每次让我去问太麻烦了,我更懒得一个电话一个电话的问,算了,恶心他们,通知小A,如果你工作做完了,就通知总机,小B和小C定时打给总机问小A是否完成了工作,那么我们就通过电话总机的自动应答来协调A,B,C之间的工作吧
这样代码就很简单了,我们这样定义
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace CrazyCoder.多线程教程
{
public class 老板
{
private static List<员工> _电话总机记录;
///
///各个员工的工作状态
///
public static List<员工> 电话总机记录
{
get { return _电话总机记录; }
set { _电话总机记录 = value; }
}
public void 多线程干活()
{
员工 a = new 员工();
员工 b = new 员工();
员工 c = new 员工();
a.工作内容 = "A";
b.工作内容 = "B";
c.工作内容 = "C";
//开始创建监听对象
_电话总机记录 = new List<员工>();
_电话总机记录.Add(a);
_电话总机记录.Add(b);
_电话总机记录.Add(c);
//开始派遣到个子的办公室
Thread threadA = new Thread(a.干活);
Thread threadB = new Thread(b.干活);
Thread threadC = new Thread(c.干活);
//干活吧
threadA.Start();
threadB.Start();
threadC.Start();
}
}
public class 员工
{
private string _工作内容;
public string 工作内容
{
get{return _工作内容;}
set{_工作内容 =value;}
}
private string _state;
public string State
{
get{return _state;}
set{_state =value;}
}
public void 干活()
{
//分工
if (_工作内容 == "A")
{
老板.电话总机记录[0]._state = "干活中";
//小A干活
//干活完毕
老板.电话总机记录[0]._state = "完毕";
//完成后有
//ThreadA.Start();
}
if (_工作内容 == "B")
{
//等待小A完成工作
while (老板.电话总机记录[0]._state != "完毕")
{
//休息1秒
}
//干活
}
if (_工作内容 == "C")
{
//等待小A完成工作
while (老板.电话总机记录[0]._state != "完毕")
{
//休息1秒
}
//干活
}
}
}
}
最新评论