根据我的理解,如果在messages
中只有MessageQueue
带有未来的时间戳,那么MessageQueue
会阻挡Looper
的循环直到那个时间到来。但是如果MessageQueue
完全是空的并且等待新的输入,这种机制也有效。在这种情况下,thread
如何知道睡眠时间/何时醒来?
线程具有“等待 - 通知”机制。线程在等待时,它正在有效地休眠。一旦通知,它就会唤醒并重新开始工作。
如果没有要服务的项目,BlockingQueue的实现使轮询线程等待,并在插入新项目时通知所有休眠线程。然后唤醒这些线程并可以获取新插入的项目。
有关此机制的更多信息可以在here(或通过谷歌搜索)找到。