码迷,mamicode.com
首页 > 编程语言 > 详细

java并发编程(十一)线程间的通信notify通知的遗漏

时间:2016-12-19 22:09:32      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:代码块   sans   com   net   条件   退出   sync   通过   .net   

       notify通知的遗漏很容易理解,即threadA还没开始wait的时候,threadB已经notify了,这样,threadB通知是没有任何响应的,当threadB退出synchronized代码块后,threadA再开始wait,便会一直阻塞等待,直到被别的线程打断。

实例见 :https://git.oschina.net/wenjieyatou/threadTest

 

在threadB进行通知之前,先将okToProceed置为true,这样如果threadA将通知遗漏,那么就不会进入while循环,也便不会执行wait方法,线程也就不会阻塞。如果通知没有被遗漏,wait方法返回后,okToProceed已经被置为true,下次while循环判断条件不成立,便会退出循环。

    这样,通过标志位和wait、notifyAll的配合使用,便避免了通知遗漏而造成的阻塞问题。

 

 

 

   总结:在使用线程的等待/通知机制时,一般都要配合一个boolean变量值(或者其他能够判断真假的条件),在notify之前改变该boolean变量的值,让wait返回后能够退出while循环(一般都要在wait方法外围加一层while循环,以防止早期通知),或在通知被遗漏后,不会被阻塞在wait方法处。这样便保证了程序的正确性。

 

java并发编程(十一)线程间的通信notify通知的遗漏

标签:代码块   sans   com   net   条件   退出   sync   通过   .net   

原文地址:http://www.cnblogs.com/wenjieyatou/p/6200528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!