关于多线程wait方法使用问题

wait应该是只有wait所同步的对象调用notify或者notifyAll才会继续吗?

为什么下面代码我没有调用notify,主线程也继续向下执行了?

public class WaitTest {

public static void main(String[] args) {

    ThreadB b = new ThreadB();

    b.start();

    synchronized (b) {

        try {

            System.out.println("Waiting for b to complete...");

            b.wait();

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

        System.out.println("Total is: " + b.total);

    }

}

}

class ThreadB extends Thread {

int total;



public void run() {

// synchronized (this) {

        System.out.println("ThreadB");

        for (int i = 0; i < 50; i++) {

            total += i;

            try {

                Thread.sleep(100);

                System.out.print(i);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

// notify();

        System.out.println();

    }

// }

}

多线程下的wait为什么可以不需要notify - 闻鸡睡觉 - 博客园 多线程下的wait方法就像我无处安放的青春,胡乱来,感觉没有一点套路。wait后不需要notify仍可以继续执行。所以我决定看看到底咋回事。。。。。 先结合join方法了解一下。 join方法是可以等 https://www.cnblogs.com/dreamowneryong/p/11678504.html wait是需要notify或notifyAll唤醒的,只不过是线程结束时,虚拟机帮我们做了一次notifyAll。

最后输出结果是什么?