为了账号安全,请及时绑定邮箱和手机立即绑定

一个java多线程问题

一个java多线程问题

我要变大神大神大大神 2017-01-01 14:52:04
public class Resource { String name; String sex; boolean flag = false; int x = 0; public synchronized void set(String name, String sex){ while (flag) try{ this.wait(); }catch(InterruptedException e){} this.name = name; this.sex = sex; flag = true; this.notifyAll(); x = (x+1)%2; } public synchronized void out(){ while (!flag) try{ this.wait(); }catch(InterruptedException e){} System.out.println(name+"...."+sex); flag = false; this.notifyAll(); } } ----------------------------------------------------------------------------------------- public class Input implements Runnable { Resource r; int x = 0; Input(Resource r){ this.r = r; } @Override public void run() { while (true){ if (r.x == 0) r.set("mike", "man"); else r.set("丽丽", "女女女女女女女女"); } } } -------------------------------- public class Output implements Runnable { Resource r; Output(Resource r) { this.r = r; } @Override public void run() { while(true) { r.out(); } } } ---------------------- public class ResourceDemo { public static void main(String[] args) { Resource r = new Resource(); Input in = new Input(r); Output out = new Output(r); Thread t1 = new Thread(in); Thread t3 = new Thread(in); Thread t5 = new Thread(in); Thread t6 = new Thread(in); Thread t7 = new Thread(in); Thread t8 = new Thread(in); Thread t9 = new Thread(in); Thread t10 = new Thread(in); Thread t11 = new Thread(in); Thread t12 = new Thread(in); Thread t2 = new Thread(out); Thread t4 = new Thread(out); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); t6.start(); t7.start(); t8.start(); t9.start(); t10.start(); t11.start(); t12.start(); } }运行结果:我想要的结果是丽丽   和  Mike   交替出现,为什么会出现这种  重复出现丽丽   又重复出现Mike  的现象呢?    求大神分析一下
查看完整描述

3 回答

?
我要变大神大神大大神

TA贡献2条经验 获得超0个赞

//img1.sycdn.imooc.com//5868cd730001716c10700516.jpg变成自问自答了

查看完整回答
反对 回复 2017-01-01
?
我要变大神大神大大神

TA贡献2条经验 获得超0个赞

//img1.sycdn.imooc.com//5868c4d2000194d204890428.jpg分析了一下午,发现问题就是出自这里。

查看完整回答
反对 回复 2017-01-01
?
杜牧之

TA贡献10条经验 获得超2个赞

那你可以使用下wait()跟notify(),使一线程运行完毕进入等待状态,唤醒二线程.这样交替等待-唤醒

查看完整回答
反对 回复 2017-01-01
  • 3 回答
  • 0 关注
  • 1350 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信