码上敲享录 > java面试题及答案大全 > 为什么 wait/notify 必须与 synchronized 一起使用?

为什么 wait/notify 必须与 synchronized 一起使用?

上一章章节目录下一章 2023-07-12已有135人阅读 评论(0)

wait()和notify()是Java中用于线程之间进行通信和同步的方法,它们必须在synchronized块或方法中使用的原因是与监视器(Monitor)的概念相关。


在Java中,每个对象都与一个监视器(Monitor)关联。synchronized关键字用于获取对象的监视器并获取锁定,进而实现对该对象的同步访问。wait()和notify()方法是监视器的一部分,通过调用它们可以实现线程的等待和唤醒操作。


wait()方法被用于使当前线程等待,放弃对象锁,并进入等待池中,直到被其他线程调用notify()方法唤醒。notify()方法用于唤醒一个处于等待池中的线程,使其进入就绪状态。


wait()和notify()方法必须在synchronized块或方法中使用的原因在于以下几点:


1. 监视器的锁定:wait()和notify()方法需要获取对象的监视器锁,以确保操作的原子性和线程之间的同步。

2. 避免异常:如果在没有获取监视器锁的情况下调用wait()或notify()方法,会抛出IllegalMonitorStateException异常。

3. 线程通信:wait()和notify()方法是用于线程之间的通信和同步;它们需要在共享资源的上下文中使用,以确保正确的通知和等待行为。


总结来说,wait()和notify()方法需要与synchronized一起使用,是为了确保线程之间的同步和协作,保证操作的原子性,并避免出现不正确的线程通信和资源竞争问题。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交