文章目录
经常遇到这样的场景:调用一个方法时等待一段时间,如果该方法能够在给定的时间段内得到结果,那么结果立刻返回,反之,超时返回默认结果。
前面介绍了等待/通知的经典范式,即加锁、条件循环和处理逻辑3个步骤,而这种范式无法做到超时等待。超时等待的加入,只需要对经典范式做出小改动,改动如下:
假设超时时间是T,那么可以推断出在当前世界now+T之后就会超时。
定义如下变量
- 等待持续时间:remaining = T
- 超时时间: future = now + T
这时只需要wait(remaining)即可,在wait(remaining)返回之后将执行:remaining = future - now。如果remining小于等于0,表示已经超时,直接退出,否则继续执行wait(remaining)
伪代码如下:
1 | //对当前对象加锁 |
超时模式就是在等待/通知模式上添加了超时控制,这使得该模式比原有的范式更具有灵活性,因为即使方法执行时间过长,也不会『永久』阻塞调用者,而是会按照调用者的要求『按时』返回。
