同步以后为什么0会出现两次,另外最后的wait()怎么结束?

package com.exer.java;

public class PrintNumber {
    public static void main(String[] args) {
        Print printnumber = new Print();
        Thread printOdd = new Thread(printnumber);
        Thread printEven = new Thread(printnumber);

        printEven.setName("打印偶数");
        printOdd.setName("打印奇数");

        printOdd.start();
        printEven.start();

    }

}

class Print implements Runnable {

    private int i;

    @Override
    public void run() {

        getPrint();

    }

    public synchronized void getPrint() {
        for (i = 0; i < 100; ) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
            i++;
            notify();
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

必须在Print类里面定义一个变量控制线程的运行,通过if语句判断奇偶性来调用wait或notify,你这个程序应该出现死锁了。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632