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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© linder_qzy 中级黑马   /  2015-3-11 11:05  /  633 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有个程序执行后不是想要的结果。想要2个线程交替运行,结果却是无序的执行,帮忙看看哪里出了问题
class Resource
{
        String name;
        String sex;
        boolean flag = false;
}

class InPut implements Runnable
{
        Resource res;
        InPut(Resource res)
        {
                this.res = res;
        }
        public void run()
        {
                int x = 0;
                while(true)
                {
                        synchronized(res)
                        {
                                if(res.flag)
                                        try
                                        {
                                                res.wait();
                                        }
                                        catch (Exception e)
                                        {
                                        }       
                               
                                if(x==0)
                                {
                                        res.name = "老王";
                                        res.sex = "男";
                                }
                                else
                                {
                                        res.name = "小张";
                                        res.sex = "女";
                                }
                                x=(x+1)%2;
                                res.flag = true;
                                res.notify();
                        }
                }
        }
}
class OutPut implements Runnable
{
        Resource res;
        OutPut(Resource res)
        {
                this.res = res;
        }
        public void run()
        {
                while(true)
                {
                        synchronized(res)
                        {
                                if(!res.flag)
                                        try
                                        {
                                                this.wait();
                                        }
                                        catch (Exception e)
                                        {
                                        }       
                                System.out.println(res.name+"----->"+res.sex);
                                res.flag = false;
                                res.notify();
                        }
                }
        }
}
class InOutWaitNotifyDemo
{
        public static void main(String[] args)
        {
                Resource res = new Resource();
                InPut in = new InPut(res);
                OutPut out = new OutPut(res);
                Thread t1 = new Thread(in);
                Thread t2 = new Thread(out);
                t1.start();
                t2.start();
        }
}
/*运行结果
* 小张----->女
老王----->男
小张----->女
小张----->女
老王----->男
小张----->女
老王----->男
老王----->男
小张----->女
。。。
* */

1 个回复

倒序浏览
file:///C:\Documents and Settings\杨强彪\Application Data\Tencent\Users\843568639\QQ\WinTemp\RichOle\RYDOTAI13~`M6MNZ25{L~UI.png你加两个睡眠机制  一个1000毫秒  一个500毫秒试试 错开时间

RYDOTAI13~`M6MNZ25{L~UI.png (3.05 KB, 下载次数: 3)

RYDOTAI13~`M6MNZ25{L~UI.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马