本帖最后由 fanshuai 于 2015-1-24 10:30 编辑
分享一下代码
/*
线程间通讯。
需求:两个机制,一个存数据,一个取数据,交替进行。
数据是共享的。
本代码仅适合一存一取交替进行,需求一变还应该用等待唤醒机制和同步代码块(同步函数)。
代码未优化,凑合着看吧。;P
*/
class Ziyuan//资源唯一,用class封装
{
String name;//资源的属性--名字
String sex;//资源的属性--性别
boolean flag=false;
}
class Input implements Runnable//存储数据
{
Ziyuan zi;
Input(Ziyuan zi)//构造函数,接收Ziyuan的对象
{
this.zi=zi;
}
public void run()//重写run方法
{
int x=0;
while(true)
{
if(!zi.flag)//用此语句锁住线程
{
if(x==0)
{
zi.name="丽丽";
zi.sex="女";
x+=1;
}
else
{
zi.name="Bob";
zi.sex="man";
x-=1;
}
zi.flag=true;//锁住本线程
}
}
}
}
class Output implements Runnable//获取数据
{
Ziyuan zi;
Output(Ziyuan zi)//构造函数,接收Ziyuan的对象
{
this.zi=zi;
}
public void run()//重写run方法
{
while(true)
{
if(zi.flag)//用此语句锁住线程
{
System.out.println(zi.name+"...."+zi.sex+".......");
zi.flag=false;//锁住本线程
}
}
}
}
class InOutDemo
{
public static void main(String[] args)
{
Ziyuan zi=new Ziyuan();//创建Ziyuan对象
Input in=new Input(zi);//创建Input对象,并用zi参数进行构造函数初始化
Output out=new Output(zi);//创建Output对象,并用zi参数进行构造函数初始化
//创建两个线程
Thread th1=new Thread(in);
Thread th2=new Thread(out);
th1.start();
th2.start();
}
}
|