等待超时模式

Posted tianzhiyun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了等待超时模式相关的知识,希望对你有一定的参考价值。

 返回主页面
1. 什么是超时等待?

什么是超时等待?

调用一个方法时,等待一段时间(一般给定一个时间段),如果该方法能够在给定的时间段内得到结果,那么将结果立刻返回,反之,超时返回默认结果。这就是超时等待。

等待/通知的经典范式,即加锁,条件循环和处理逻辑三个步骤,而这种范式无法做到超时等待。

2. 等待/通知的经典范式。
等待/通知的经典范式,可以分为两部分,分别针对等待方(消费者)和通知方(生产者)。
 

技术分享图片

3. 等待超时模式
由于经典的等待/通知范式无法做到超时等待,也就是说,当消费者在获得锁后,如果条件不满足,等待生产者改变条件之前会一直处于等待状态,在一些实际应用中,会浪费资源,降低运行效率。
事实上,只要对经典范式做出非常小的改动,就可以加入超时等待。
假设超时时间段是T,那么可以推断出,在当前时间now+T之后就会超时。
定义如下变量:
等待持续时间remaining = T;
超时时间future = now + T。
伪代码如下所示:
 
long future = System.currentTimeMillis() + mills;
        long remaining = mills;
        synchronized (lock) {
            while (!condition && remaining > 0) {
                wait(remaining);
                remaining = future - System.currentTimeMillis();
            }
            //处理代码
        }

 

以上是关于等待超时模式的主要内容,如果未能解决你的问题,请参考以下文章

STM32HAL轮询模式串口接收函数超时等待问题?

网络I/O模型--03非阻塞模式(ServerSocket与Socket的超时处理)--解除accept() read()方法阻塞

“错误代码:1205。超过锁定等待超时;尝试重新启动事务”删除事件

在执行下一行代码之前等待超时完成

Android ANR - 输入调度超时

Kafka Connect - 无法刷新,等待生产者刷新未完成的消息时超时