黑马程序员技术交流社区
标题:
多线程的等待唤醒机制
[打印本页]
作者:
More
时间:
2014-7-13 06:39
标题:
多线程的等待唤醒机制
class Res
{
String name;
String sex;
boolean flag=false;
}
class Input implements Runnable
{
//Object b=new Object();//这样定义对象 把obj作为锁但是Output上也定义了obj但是两者不是同一个对象
private int x=0;
private Res r;
Input(Res r){
this.r=r;
}
//Res r=new Res();//在Output中也创建了Res对象,这样相当于创建了两个对象,不符合本意
public void run(){//对name和sex进行赋值
while(true)
{
//同步代码块
synchronized(r)//将r作为锁 和Output是同一把锁
{
if(r.flag){
try{r.wait();}catch(Exception e){}
}else{
if(x==0){
r.name="mike";
r.sex="man";
}else{
r.name="丽丽";
r.sex="女女女女";
}
x=(x+1)%2;
r.flag=true;
r.notify();
}
}
}
}
}
class Output implements Runnable
{
private Res r;
//Object b=new Object();//这样定义对象 把obj作为锁但是Input上也定义了obj但是两者不是同一个对象
Output(Res r){
this.r=r;
}
//Res r=new Res();
public void run(){//提取name和sex的值
while(true){
synchronized(r){//将r作为锁 和Input是同一把锁
if(!r.flag){
try{r.wait();}catch(Exception e){}
}else{
System.out.println(r.name+"....."+r.sex);
}
r.flag=false;
r.notify();
}
}
}
}
class InputOutputDemo
{
public static void main(String[] args)
{
Res r=new Res();
//Input Output使用同一个对象
Input in=new Input(r);
Output out=new Output(r);
Thread t1=new Thread(in);
Thread t2=new Thread(out);
t1.start();
t2.start();
}
}
复制代码
输出时,为什么产生不了赋值一遍就打印一遍的效果??
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2