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

解答下线程问题谢谢\!!!

解答下线程问题谢谢\!!!

慕姐8946757 2017-08-09 06:51:34
class ThreadTest01 implements Runnable { int num = 100; // 2、覆盖接口中的run方法。。 @Override public void run() { while (true) { /* * 格式: synchronized(锁对象){ //需要同步的代码 } */ synchronized (Demo1.class) { if (num<= 0) { break; } try { Thread.sleep(1); System.out.println( Thread.currentThread().getName() + "出售了" + (1000 - num + 1) + "张票,还剩余:" + (--num) + "张"); /* * this.notify(); this.wait(); */ } catch (InterruptedException e) { e.printStackTrace(); } } } }}这个我把if语句里面的num<=0  break; 改成num>0; 为什么程序一直在运行,还有负数啊,求解释?
查看完整描述

3 回答

已采纳
?
慕工程2701759

TA贡献16条经验 获得超17个赞

老哥,看起来也没毛病,运行起来也没毛病,不管是一个线程还是多个线程。我和你的区别就是我的锁是自己定义了一个Object o= new Object();你那个锁我不知道是什么

查看完整回答
反对 回复 2017-08-09
  • 慕姐8946757
    慕姐8946757
    不是的 程序这样可以运行 我就是想问 如果把if (num<= 0) { break; } 这个代码改为 if (nnum>0) { } 这样为什么不能运行了?
  • 慕工程2701759
    慕工程2701759
    我知道,两种都运行过,没有异常,换成num>0.因为本来就是num=100,直接break,退出循环结束了。没有出现你说的能运行,还会出现负数的问题。
?
qq_雨过之后_1

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

一致循环是因为外面是while(true),而出现负数肯定是锁对象不一致,试一下ThreadTest01 .class这个锁对象

查看完整回答
1 反对 回复 2017-08-09
?
慕姐8946757

TA贡献39条经验 获得超24个赞

class ThreadTest01 implements Runnable {

int num = 100;


// 2、覆盖接口中的run方法。。

@Override

public void run() {

while (true) {

/*

* 格式: synchronized(锁对象){ //需要同步的代码 }

*/

synchronized (Demo1.class) {

if (num》0) {

}

try {

Thread.sleep(1);

System.out.println(

Thread.currentThread().getName() + "出售了" + (1000 - num + 1) + "张票,还剩余:" + (--num) + "张");

/*

* this.notify(); this.wait();

*/

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

请把我这段代码运行一下试试 为甚有负数 不对了? 知道回答下 谢谢!

查看完整回答
反对 回复 2017-08-09
  • 3 回答
  • 0 关注
  • 1651 浏览

添加回答

举报

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