我想输出的效果如那个显示。可是我遇到了问题毕老师的视频是把wait()给放到if(r.flag)后的那一行,
如图我是直接把它放进来执行的可是出来的效果和放到if(r.flag)后的效果是一样的,
我就奇怪了,
我把notify();放到wait()后那么那个输出的线程不应该是还在等待的吗?
那怎么能输出一样的结果呢?
我想象中的结果应该是两线程都在wait中啊!!多线程
如图我是直接把它放进来执行的可是出来的效果和放到if(r.flag)后的效果是一样的,
我就奇怪了,
我把notify();放到wait()后那么那个输出的线程不应该是还在等待的吗?
那怎么能输出一样的结果呢?
我想象中的结果应该是两线程都在wait中啊!!多线程
class Res{
boolean flag;
String name;
String sex;
}
class Input implements Runnable{
private Res r;
Input(Res r){
this.r = r;
}
public void run(){
int a = 0;
r.flag = true;
synchronized(r){
while(true){
if(r.flag){
if(a==0){
r.name = "taofeifei";
r.sex = "man";
}
else{
r.name = "陶允立";
r.sex = "女";
}
a=(a+1)%2;
r.flag = false;
try{r.wait();}catch(Exception e){}
r.notify();
}
}
}
}
}
class Output implements Runnable{
private Res r;
Output(Res r){
this.r = r;
}
public void run(){
synchronized(r){
while(true){
if(!r.flag){
System.out.println(r.name+"......"+r.sex);
r.flag=true;
r.notify();
try{wait();}catch(Exception e){}
}
}
}
}
}
public class InputOutputTest {
public static void main(String[] args){
Res r = new Res();
Input i = new Input(r);
Output o = new Output(r);
Thread a = new Thread(i);
Thread b = new Thread(o);
a.start();
b.start();
}
}