据我了解,如果messages
中只有MessageQueue
带有未来时间戳记,则MessageQueue
会阻塞Looper
的循环直到那个时候到了。但是,如果MessageQueue
完全为空并等待新输入,则此机制也可以使用。在这种情况下,thread
如何知道睡眠时间/何时醒来?
答案 0 :(得分:1)
线程具有“等待通知”机制。当线程正在等待时,它实际上正在休眠。收到通知后,它将唤醒并恢复工作。
BlockingQueue的实现使轮询线程在没有要提供的项目的情况下等待,并在插入新项目时通知所有休眠线程。这些线程然后被唤醒,并可以接收新插入的项目。
有关该机制的更多信息,请参见here(或通过谷歌搜索)。