Начиная с iOS 10 вы можете разработать расширение службы уведомлений для своего приложения. Он будет запущен системой, когда вы получите уведомление, и вы можете рассчитать действительный номер для значка и установить его.
Взгляните на документацию: https://developer.apple .com / документация / usernotifications / unnotificationserviceextension
Ограниченная вместимость BlockingQueue
также полезна, если Вы хотите отрегулировать своего рода запрос. С неограниченной очередью производители могут добраться далеко впереди потребителей. Задачи будут в конечном счете выполнены (если не будут так многие, что они вызывают OutOfMemoryError
), но производитель, возможно, давно сдался, таким образом, усилие потрачено впустую.
В ситуациях как они, может быть лучше сигнализировать потенциальному производителю, которого очередь полна, и бросить быстро с отказом. Например, производитель мог бы быть веб-запросом с пользователем, который не хочет ожидать слишком долго, и даже при том, что он не использует много циклов ЦП при ожидании, он израсходовал ограниченные ресурсы как сокет и некоторая память. Отказ даст задачи, которые уже были поставлены в очередь лучший шанс закончиться своевременно.
<час>Относительно исправленного вопроса, который я интерпретирую как, "Что такое хороший набор для содержания объектов в пуле?"
неограниченным LinkedBlockingQueue
является хороший выбор для многих пулов. Однако в зависимости от Вашей стратегии управления пула, ConcurrentLinkedQueue
может работать также.
В приложении объединения, "помещенное" блокирование не является соответствующим. Управление максимальным размером очереди является заданием пула manager— это решает, когда создать или уничтожить ресурсы для пула. Клиенты пула одалживают и возвращают ресурсы из пула. Добавление нового объекта или возврат ранее одолженного объекта к пулу должны быть быстрыми, не блокируя операции. Так, ограниченная полная очередь не является хорошим выбором для пулов.
, С другой стороны, при получении объекта от пула, большинство приложений хочет ожидать, пока ресурс не доступен. Операция "взятия", что блоки, по крайней мере временно, намного более эффективны, чем "активное ожидание" — неоднократно опрашивая, пока ресурс не доступен. Эти LinkedBlockingQueue
хороший выбор в этом случае. Заемщик может заблокироваться неограниченно долго с [1 113] take
или ограничить время, которое это готово заблокировать с [1 114] poll
.
А менее общий падеж в том, когда клиент не готов заблокироваться вообще, но имеет способность создать ресурс для себя, если пул пуст. В этом случае, ConcurrentLinkedQueue
хороший выбор. Это - вид серой области, где было бы хорошо совместно использовать ресурс (например, память) так же как возможный, но скорость еще более важна. В худшем случае это ухудшается к каждому потоку, имеющему его собственный экземпляр ресурса; затем было бы более эффективно не потрудиться пытаться совместно использовать среди потоков.
Оба из этих наборов дают хорошую производительность и простоту использования в параллельном приложении. Для непараллельных приложений, ArrayList
твердо биться. Даже для наборов, которые растут динамично, издержки на элемент LinkedList
позволяют ArrayList
с некоторыми пустыми слотами оставаться конкурентоспособными мудрый памятью.
Вы видели бы BlockingQueue
в многопоточных ситуациях. Например, Вам нужна передача в BlockingQueue
в качестве параметра для создания ThreadPoolExecutor
, если Вы хотите создать одного конструктора использования. В зависимости от типа очереди Вы передаете в исполнителе, мог действовать по-другому.