龙空技术网

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

从头开始自学java 244

前言:

而今小伙伴们对“javaif没有”可能比较讲究,大家都需要知道一些“javaif没有”的相关文章。那么小编也在网络上汇集了一些对于“javaif没有””的相关文章,希望我们能喜欢,咱们一起来了解一下吧!

并发编程经常需要等待某个事件发生。

条件变量就是为这种情况而设计的。

使用条件变量的模式

一个条件变量需要与一把锁关联,线程在开始等待条件之前必须获取这把锁。

获取锁后,线程检查所等待的条件是否已经为真。如果条件为真,线程将解锁并继续执行。

如果所等待的条件不为真,线程会调用await(),它将原子地解锁并阻塞等待该条件。

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

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

条件模式解决哲学家问题

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

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

标签: #javaif没有 #java哲学家