A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 回头浪子心 中级黑马   /  2014-8-21 21:07  /  799 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写完运行后发现有漏洞,那位大神帮分析分析??
/*
* 多线程的通信
* 输入线程赋值
* 输出线程打印值
*/
//资源对象
class Resource{
        String name;
        String sex;
        boolean b = false;//定义,b=true,赋值完成,b = false打印完成
}
//定义输入线程
class Input implements Runnable{
        Resource r  ;
        Input(Resource r){this.r = r;}
        public void run(){
                int x = 0 ;
                while(true){
                        synchronized(r){
                                //输入线程,判断b的值,如果是真,等待
                                if(r.b==true)
                                        try{r.wait();}catch(Exception e){}
                        if(x%2==0){
                        r.name = "张三";
                        r.sex = "男";
                        }else{
                        r.name = "lisi";
                        r.sex = "nv";
                        }
                        x++;
                        //标记改成true
                        r.b = true;
                        //唤醒输出线程
                        r.notify();
                        }
                }
        }
}
//定义输出线程,打印变量值
class Output implements Runnable{
        Resource r ;
        Output(Resource r){this.r = r;}
        public void run(){
                while(true){
                        synchronized(r){
                                if(r.b==false)
                                        try{r.wait();}catch(Exception e){}
                        System.out.println(r.name+"..."+r.sex);
                          r.b = false;
                          r.notify();
                        }
                }
        }
}
public class ThreadDemo6 {
        public static void main(String[] args) {
                Resource  r = new Resource();
                Input in = new Input(r);
                Output out = new Output(r);
                Thread tin = new Thread(in);
                Thread tout = new Thread(out);
                tin.start();
                tout.start();
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马