美文网首页
java使用条件变量的模式以及使用条件变量来解决哲学家问题

java使用条件变量的模式以及使用条件变量来解决哲学家问题

作者: 每天学点编程 | 来源:发表于2018-02-19 22:19 被阅读11次

请关注我的微信公众号

个人微信公众号

技术交流群 (仅作技术交流):642646237

​请关注我的头条号:


并发编程经常需要等待某个事件发生。
条件变量就是为这种情况而设计的。

使用条件变量的模式

一个条件变量需要与一把锁关联,线程在开始等待条件之前必须获取这把锁。
获取锁后,线程检查所等待的条件是否已经为真。如果条件为真,线程将解锁并继续执行。
如果所等待的条件不为真,线程会调用await(),它将原子地解锁并阻塞等待该条件。

当另一个线程调用了signal()signalAll(),意味着对应的条件可能变为真,await()将原子地恢复运行并重新加锁。

需要注意的是当await()函数返回时,只意味着等待的条件可能为真。这就是为什么要在一个循环中调用await()的原因——从await()返回后,需要重新检查等待的条件是否为真,必要的话可能再次调用await()并阻塞。

条件模式解决哲学家问题





将竞争从对筷子的争夺转换成了对状态的判断:仅当哲学家的左右邻座都没有进餐时,他才可以进餐。

其他解决方案中,经常出现的状况是只有一个哲学家能进餐,因为其他人都持有一根筷子并在等待另外一根。

相关文章

网友评论

      本文标题:java使用条件变量的模式以及使用条件变量来解决哲学家问题

      本文链接:https://www.haomeiwen.com/subject/kyjwtftx.html