Java多线程与并发03: Wait & Notification

多线程的协同

多个线程之间协同使用共享资源的问题,对资源的读写进行条件控制,使用wait和notify方式控制线程之间的等待和唤醒操作。

 

object类提供的api
 

wait方法:当前线程等待某个条件的成立,其他线程可以使用notify或notifyall方法唤醒当前线程。

wait(long timeout)方法:与上面类似,但是有个超时时间,不会一直wait

notify()随机唤醒一个等待中的线程。

notifyAll()唤醒所有,谁抢到锁是谁的。

 

基本使用格式:

Java多线程与并发03: Wait & Notification_第1张图片

Java多线程与并发03: Wait & Notification_第2张图片

 

共享资源的实例

 

共享资源类:

Java多线程与并发03: Wait & Notification_第3张图片

Java多线程与并发03: Wait & Notification_第4张图片

资源生产者:

Java多线程与并发03: Wait & Notification_第5张图片

资源消费者:

Java多线程与并发03: Wait & Notification_第6张图片

Java多线程与并发03: Wait & Notification_第7张图片

 

可能会出现以下问题:

Java多线程与并发03: Wait & Notification_第8张图片

这是因为共享资源没有同步。

可以做以下改进:

Java多线程与并发03: Wait & Notification_第9张图片

Java多线程与并发03: Wait & Notification_第10张图片

 

这里的writable就是线程的唤醒条件,当条件不成立时,在while循环中wait,直到被notify唤醒。被notify唤醒后可能会条件成立也可能不成立,需要再次判断,若条件成立,将执行while循环后的代码,唤醒对方的线程。

你可能感兴趣的:(多线程与并发)