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

问题描述 投票:1回答:1

根据我的理解,如果在messages中只有MessageQueue带有未来的时间戳,那么MessageQueue会阻挡Looper的循环直到那个时间到来。但是如果MessageQueue完全是空的并且等待新的输入,这种机制也有效。在这种情况下,thread如何知道睡眠时间/何时醒来?

android multithreading message-queue message android-looper
1个回答
1
投票

线程具有“等待 - 通知”机制。线程在等待时,它正在有效地休眠。一旦通知,它就会唤醒并重新开始工作。

如果没有要服务的项目,BlockingQueue的实现使轮询线程等待,并在插入新项目时通知所有休眠线程。然后唤醒这些线程并可以获取新插入的项目。

有关此机制的更多信息可以在here(或通过谷歌搜索)找到。

© www.soinside.com 2019 - 2024. All rights reserved.