JEP 266: More Concurrency Updates
Дальнейшие обновления средств конкурентности
| Ответственный | Doug Lea |
| Тип | Feature |
| Область | SE |
| Статус | Closed / Delivered |
| Выпуск | 9 |
| Компонент | core-libs / java.util.concurrent |
| Обсуждение | core dash libs dash dev at openjdk dot java dot net |
| Трудоёмкость | S |
| Длительность | S |
| Связан с | JEP 193: Variable Handles |
| Рецензенты | Chris Hegarty, Martin Buchholz, Paul Sandoz |
| Одобрен | Brian Goetz |
| Создан | 2015/08/04 11:01 |
| Обновлён | 2017/04/24 23:02 |
| Задача | 8132960 |
Аннотация
Совместимый фреймворк публикации-подписки, улучшения API CompletableFuture и различные другие доработки.
Мотивация
Способы использования конкурентности и параллелизма в приложениях постоянно развиваются, и поддержка в библиотеках должна развиваться вместе с ними.
Описание
-
Интерфейсы, поддерживающие фреймворк публикации-подписки Reactive Streams, вложены в новый класс
Flow. ОбъектыPublisherпроизводят элементы, которые потребляют один или несколько объектовSubscriber, и каждым из них управляет свойSubscription. Взаимодействие основано на простой форме управления потоком данных (методSubscription.requestдля передачи back pressure), с помощью которой можно избежать проблем с управлением ресурсами, иначе возможных в системах на основе «push». Предоставлен вспомогательный классSubmissionPublisher, с помощью которого разработчики могут создавать собственные компоненты.
Эти (очень небольшие) интерфейсы соответствуют интерфейсам, определённым при широком участии сообщества (в рамках инициативы Reactive Streams), и обеспечивают совместимость между рядом асинхронных систем, работающих на JVM. Вложение интерфейсов в класс — консервативное решение, которое позволяет использовать их при различных краткосрочных и долгосрочных сценариях развития. Предоставлять сетевые компоненты или компоненты на основе ввода-выводаjava.util.concurrentдля распределённого обмена сообщениями не планируется, но возможно, что будущие выпуски JDK будут содержать такие API в других пакетах. -
Улучшения API
CompletableFuture- Добавлены улучшения, связанные со временем, которые позволяют future завершиться значением или исключением по истечении заданного времени: см. методы
orTimeoutиcompleteTimeout. Кроме того, дополняющий ихExecutor, который возвращают статические методы с именемdelayedExecutor, позволяет выполнить задачу по истечении заданного времени. Его можно сочетать с методамиCompletableFuture, принимающимиExecutor, чтобы поддержать операции с задержками. - Добавлены улучшения для подклассов, которые упрощают наследование от
CompletableFuture, например, чтобы создать подкласс, поддерживающий другой исполнитель по умолчанию.
- Добавлены улучшения, связанные со временем, которые позволяют future завершиться значением или исключением по истечении заданного времени: см. методы
-
Многочисленные улучшения реализации, накопившиеся со времён JDK 8; многие из них небольшие, но некоторые включают изменение формулировок спецификации в Javadoc.
Тестирование
Участники JSR 166 EG, продолжающие работу, предоставляют функциональные тесты, тесты TCK и тесты производительности для всех компонентов.
Риски и допущения
Будут приняты меры, чтобы сохранить все небольшие, но необходимые различия в коде между репозиторием JDK 9 и репозиторием 166.