想去阿里吃泡面 2022-04-01 16:24 采纳率: 90.5%
浏览 44
已结题

java多线程交替输出 不知哪里除了错误 没有报错 但是控制台没有内容

public class WaitNotifyHomework {
public static void main(String[] args) {
Number number = new Number();

    Thread t1 = new Thread(new Mythread1(number));
    Thread t2 = new Thread(new Mythread1(number));
    t1.setName("t1");
    t2.setName("t2");
    t1.start();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    t2.start();
}

}
class Number{
private int i = 0;
public Number() {
}
public int getI() {
return i;
}
public int work(){
return i++;
}
}
class Mythread1 implements Runnable{
private Number number;

public Mythread1(Number number) {
    this.number = number;
}
@Override
public void run() {
    while(number.getI()<100){
        synchronized (number) {
            if (number.getI() % 2 == 0){
                try {
                    number.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName()+""+number.work());
            number.notify();
        }

        }
    }

}

class Mythread2 implements Runnable{
private Number number;
public Mythread2(Number number) {
this.number = number;
}
@Override
public void run() {
while(number.getI()<100){
synchronized (number) {
if (number.getI() % 2 != 0){
try {
number.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+""+number.work());
number.notify();

        }

    }
}

}

  • 写回答

2条回答 默认 最新

  • 一起随缘 2022-04-01 16:43
    关注

    将main方法中第2行代码改为Thread t2 = new Thread(new Mythread2(number));即可

    img

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 4月1日