MessageQueue如何知道如果其中没有消息,将阻塞多长时间?

时间:2019-03-22 12:29:21

标签: android multithreading message-queue message android-looper

据我了解,如果messages中只有MessageQueue带有未来时间戳记,则MessageQueue会阻塞Looper的循环直到那个时候到了。但是,如果MessageQueue完全为空并等待新输入,则此机制也可以使用。在这种情况下,thread如何知道睡眠时间/何时醒来?

1 个答案:

答案 0 :(得分:1)

线程具有“等待通知”机制。当线程正在等待时,它实际上正在休眠。收到通知后,它将唤醒并恢复工作。

BlockingQueue的实现使轮询线程在没有要提供的项目的情况下等待,并在插入新项目时通知所有休眠线程。这些线程然后被唤醒,并可以接收新插入的项目。

有关该机制的更多信息,请参见here(或通过谷歌搜索)。