25 父子线程怎么通信

vvEcho 2026-03-14 11:21:21
Categories: Tags:

为什么wait()必须在synchronized 里调用,而sleep()不需要?

wait()必须在synchronized中调用,是因为它依赖对象的监视器锁(monitor),并且会释放该锁;
而sleep()只是让线程休眠,不涉及锁机制

wait() 是 Object 的方法,用于线程之间的通信,它会释放当前对象的监视器锁并进入等待队列,因此必须在 synchronized 块中调用,否则线程没有持有该对象的锁,JVM 会抛出 IllegalMonitorStateException。
而 sleep() 是 Thread 的方法,仅仅是让当前线程暂停执行一段时间,不涉及锁的释放,因此不需要在 synchronized 中调用