gpt4 book ai didi

java - 如何区分等待(长时间超时)退出通知或超时?

转载 作者:IT老高 更新时间:2023-10-28 21:12:10 29 4
gpt4 key购买 nike

有这个等待声明:

public final native void wait(long timeout) throws InterruptedException;

它可能会因 InterruptedException 退出,也可能因超时退出,也可能因为 Notify/NotifyAll 方法在另一个线程中被调用,Exception 很容易捕获,但是......

有什么方法可以知道退出原因是超时还是通知?

编辑:

这是一种可行的棘手方法,(尽管我不喜欢它)

          long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}

最佳答案

notify 可以返回的另一个原因是:虚假唤醒。这是一件不太可能但可能发生的事情,因为在某些硬件/操作系统组合上防止虚假唤醒非常昂贵。

因此,您始终必须在循环中调用 wait() 并重新检查您正在等待的条件。在此工作期间,很容易同时检查超时。

有关详细信息,我推荐《Java 并发实践》一书。并使用更高级别的结构,这一切都对你正确。

关于java - 如何区分等待(长时间超时)退出通知或超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3397722/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com