黑马程序员技术交流社区
标题:
线程间的通信,程序怎么得到想要的结果?
[打印本页]
作者:
苏乞儿
时间:
2014-9-20 00:25
标题:
线程间的通信,程序怎么得到想要的结果?
package cn.itcast.thread;
/*
* 要求:线程的通信问题,实现姓名和性别的相符输出,并最后间隔打印出两个人的姓名和性别。
*/
public class PrintThreadDemo {
public static void main(String[] args) {
Resource r=new Resource();//保证是同一数据源
Input in=new Input(r);
Output out=new Output(r);
Thread t0=new Thread(in);
Thread t1=new Thread(out);
t0.start();
t1.start();
}
}
class Resource {//数据源
String name;
String sex;
}
class Input implements Runnable
{
private Resource r;
public Input(Resource r)
{
this.r=r;
}
boolean flag=true;
int i=0;
public void run()
{
while(true)
{
synchronized(r)
{
//添加标志位,为false,表示尚有未打印的数据。
if(r.flag==false){
try{r.wait();}catch(Exception e){}//wait()方法异常处理
}else{
if(i%2==0)//偶数给男的赋值
{
r.name="zhangsan";
r.sex="male";
}
else//奇数给女的赋值
{
r.name="丽丽";
r.sex="女";
}
i++;
flag=false;//赋值结束后,标志位置反
r.notify();
}
}
}
}
}
class Output implements Runnable{
private Resource r;
public Output(Resource r){
this.r=r;
}
boolean flag=true;
public void run(){
while(true){
synchronized(r){
//标志位为false,打印姓名和性别。
if(r.flag==false){
System.out.println(Thread.currentThread().getName()+"..."+r.name+"..."+r.sex);
flag=true;
r.notify();
}else{
try{r.wait();}catch(Exception e){}
}
}
}
}
}
复制代码
为什么打印的男女姓名和性别:Q不是交替出现的呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2