wait和notify一定放入synchronized中的理解

wait和notify是用来实现多个线程之间的一个协调,wait表示让线程进入到阻塞状态,notify表示让阻塞的线程被唤醒,wait和notify必然是成对出现的,如果一个线程被线程阻塞,必然需要宁外一个线程通过notify方法来唤醒,从而去实现多个线程之间的一个通信,在多线程里面要实现多线程通信,除了管道流以外,只能通过共享变量的方法来实现,也就是说线程t1修改变量s,线程t2获得修改后的共享变量s的值,从而去完成数据的通讯。,但是多线程具有并行执行的特征,也就是说在同一个时刻多个线程可以同时来执行,在这种情况下线程t2在访问变量s之前,必须要知道线程t1已经修改过了变量s,否则就需要等待,同时再修改之后还需要把处于等待状态下的线程被唤醒,所以在实现多个线程之间的通信的情况下就必须要有一个静态条件,去控制什么时候条件等待,什么时候条件唤醒,而synchronized条件互斥就可以实现这样一个互斥的条件,也就是在通过共享变量的共同通信的场景里面参与通信的线程必须要去竞争到这要一个共享变量的一个锁资源·,才能够有资格去对共享变量去进行修改。修改完之后释放锁,其他线程就可以再次竞争同一个共享变量的锁,来获取修改之后的数据,从而去完成线程之间的一个通信。

为了避免wait和notify错误使用,JDK强制把wait和notify要求写在同步代码块里面,否则会报一个Illegal MonitorState Exception异常

wait和notify非常适合生产者和消费者的模型,连接池的就绪的等待和就绪之后的唤醒

posted @ 2022-04-24 23:00  开源遗迹  阅读(116)  评论(0)    收藏  举报