黑马程序员技术交流社区
标题:
线程间通讯例题,不用等待唤醒机制,不用同步代码块
[打印本页]
作者:
fanshuai
时间:
2015-1-23 18:56
标题:
线程间通讯例题,不用等待唤醒机制,不用同步代码块
本帖最后由 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();
}
}
作者:
huyang936
时间:
2015-1-23 21:43
帮顶 兄弟
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2