Я собираюсь использовать DelayQueue из интерфейса Collections в программе, имитирующей парковку. Мне было интересно, есть ли несколько вызовов метода вызова в очереди, в то время как ни один элемент не истек, последний вызов будет возвращать элемент, который выходит первым, или возвращает элемент, который появляется после предыдущего вызова?DelayQueue multiple take calls
ответ
Согласно Javadoc DelayQueue.take
«s:
Извлекает и удаляет главу этой очереди, ожидая в случае необходимости пока элемент с истекшим сроком задержки не доступен на этой очереди.
Это что-то вроде этого:
DelayQueue<DelayedSomething> q = new DelayQueue<>();
q.offer(somethingExpiringIn60s);
q.offer(somethingExpiringIn5s);
q.offer(somethingExpiringIn5min);
DelayedSomething shouldBeSomethingExpiringIn5s = q.take(); //[1]
DelayedSomething shouldBeSomethingExpiringIn60s = q.take(); //[2]
DelayedSomething shouldBeSomethingExpiringIn5min = q.take(); //[3]
будет работать, как этого - [1]
вызов будет блокировать текущий поток 5s, а затем вернуть второй вставленный элемент. [2]
заблокирует текущий поток на 55 секунд, а затем вернет первый вставленный элемент. Звонок [3]
take
будет блокироваться в течение 4 минут, в конце концов возвращая последний вставленный элемент.
Если вы хотите использовать DelayQueue
в многопоточной среде, пожалуйста, обратите внимание, что это не гарантирует справедливость (это было бы справедливо, если потоки, требующие take
будут обслуживаться в том же порядке, как они называли take
) - это зависит от реализации, и в OpenJDK 7 и 8 он не использует справедливые блокировки для реализации - поэтому порядок, в котором будут выполняться потоки, является произвольным.
- 1. http: multiple response.WriteHeader calls
- 2. listview multiple calls
- 3. Rhomobile asynchttp multiple calls
- 4. multiple regionDidChangeAnimated calls - что дает?
- 5. PHP API acess multiple calls
- 6. PHP soapClient multiple calls fail
- 7. Flex mobile take multiple photo
- 8. Coalesce/defer multiple child scope $ apply calls
- 9. jquery collect from multiple ajax calls
- 10. MVC C# multiple async ajax calls
- 11. PHP cURL multiple calls vs simplexml_load_file
- 12. Nonblocking DelayQueue, Java
- 13. Оперативно обновлять элемент в DelayQueue
- 14. Есть ли противоположность для DelayQueue?
- 15. Направление вывода cron (calls) bash (calls) python3
- 16. Как установить емкость для Java DelayQueue
- 17. Является ли DelayQueue без справедливости проблематичным?
- 18. Take-while и take-nth in clojure
- 19. Destructor calls
- 20. Ajax calls и JQuery: stop previuos ajax calls
- 21. jQuery ajax calls
- 22. Google Charts calls JSON
- 23. Android Okhttp asynchronous calls
- 24. stop running ajax calls
- 25. Queuing EWS calls
- 26. Linux Block System Calls
- 27. По умолчанию Constructor Calls
- 28. Java parallel db calls
- 29. async web calls php
- 30. Facebook API API Calls
'take' будет ждать первого истекшего элемента и затем вернуть его, вы не можете иметь несколько вызовов' take', ожидающих в том же потоке. Если у вас несколько звонков один за другим, они возвращают элементы в порядке истечения срока действия, – mszymborski
Хорошо, и это первый или последний вызов, который получает следующий элемент? –
Первый вызов возвращает элемент, срок действия которого истек. следующий второй, и так далее. – mszymborski