请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,能帮我看一下这个代码哪里出问题了吗

public class SingelDoublechange {
private static final Object object=new Object();
private static int num = 0;
public static void main(String[] args) throws InterruptedException {

    Thread thread1=new Thread(new Single(num,object));
    Thread thread2=new Thread(new Double(num,object));
    thread2.start();

// Thread.sleep(10);
thread1.start();

}

}
class Single implements Runnable{
private int num;
Object object;
public Single(int num,Object object){
this.num=num;
this.object=object;
}
@Override
public void run() {

    while(num<100) {
        synchronized (object) {
          if (num % 2 != 0) {
            System.out.println(num + "是奇数");
            num++;
          }
        }
    }
}

}
class Double implements Runnable{
private int num;
Object object;
public Double(int num,Object object){
this.num=num;
this.object=object;
}
@Override
public void run() {

    while (num<100) {
        synchronized (object){
        if (num % 2 == 0) {
            System.out.println(num + "是偶数");
            num++;
        }
    }
    }
}

}

结果就是只输出一个0 然后卡住了

正在回答

1回答

为了提高小伙伴的debug能力,小伙伴可以先尝试debug并且配合课程提供的源码,两边一对比就可以很快发现区别,找出问题。

如果你经过对比,还是不能发现问题或者无法解决,请再次留言,我非常愿意帮你一起排查问题。

0 回复 有任何疑惑可以回复我~
  • 提问者 JLU_LONG #1
    老师,我设置了断点,发现偶数线程释放了object锁之后根本无法进入奇数线程,这是为什么呢?
    回复 有任何疑惑可以回复我~ 2019-12-19 18:47:39
  • 提问者 JLU_LONG #2
    就是我在奇数线程上设置断点,debug后显示Frames are not avaliable
    回复 有任何疑惑可以回复我~ 2019-12-19 18:50:11
  • 提问者 JLU_LONG #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-12-19 20:11:56
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信