据我了解,如果MessageQueue
中只有带有未来时间戳的messages
,则MessageQueue
会阻塞Looper
的循环,直到该时间到来。但是,如果MessageQueue
完全为空并等待新输入,则此机制也有效。在这种情况下,thread
如何知道睡多久/什么时候醒来?
线程具有"等待通知"机制。当线程正在等待时,它实际上处于休眠状态。收到通知后,它会唤醒并重新开始工作。
BlockingQueue 的实现使轮询线程在没有要服务的项目时等待,并在插入新项目时通知所有休眠线程。然后,这些线程将唤醒并可以获取新插入的项目。
有关此机制的更多信息可以在此处(或通过谷歌搜索(找到。