Как MessageQueue знает, как долго блокировать, если в нем нет сообщений? - PullRequest
1 голос
/ 22 марта 2019

Насколько я понимаю, если в MessageQueue есть только messages с меткой времени для будущего, MessageQueue блокирует цикл Looper до тех пор, пока не наступит это время.Но этот механизм также работает, если MessageQueue полностью пуст и ожидает нового ввода.Откуда thread знает, как долго / когда просыпаться в этом случае?

1 Ответ

1 голос
/ 22 марта 2019

Потоки имеют механизм ожидания-уведомления.Когда поток ожидает, он фактически спит.Получив уведомление, он просыпается и возвращается к работе.

Реализации BlockingQueue заставляют потоки опроса ждать, если нет элементов для обслуживания, и уведомляют все спящие потоки, когда вставляется новый элемент.Эти потоки затем просыпаются и могут взять только что вставленный элемент.

Более подробную информацию об этом механизме можно найти здесь (или путем поиска в Google).

...