诸如等待/通知和锁定/条件之类的并发管理机制似乎受到以下因素的影响虚假唤醒 https://en.wikipedia.org/wiki/Spurious_wakeup。开发人员通过重新检查情况是否确实发生变化来应对这些意外的唤醒。
当谈到 CountDownLatch 时,虚假唤醒是否会成为问题?
的 javadocCountDownLatch#await() http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html#await-- states
如果当前计数大于零,则当前线程
出于线程调度目的而被禁用并处于休眠状态,直到
发生以下两种情况之一:
- 由于调用,计数达到零
countDown()
方法;或者
- 其他一些线程会中断当前线程。
dormant意味着该方法不会返回。换句话说,虽然可能发生虚假唤醒,但不会导致await
方法返回。
你可以看看执行 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/concurrent/CountDownLatch.java#CountDownLatch.await%28%29看看这是如何准确完成的,但是,简而言之,这是循环和“等待”的典型技巧(通过LockSuport#park
or Object#wait
受虚假唤醒的影响)直到满足条件。
到那个时刻CountDownLatch
,虚假唤醒是一个问题吗?
No.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)