openjdk.ruOpenJDK на русском

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 и различные другие доработки.

Мотивация

Способы использования конкурентности и параллелизма в приложениях постоянно развиваются, и поддержка в библиотеках должна развиваться вместе с ними.

Описание

  1. Интерфейсы, поддерживающие фреймворк публикации-подписки Reactive Streams, вложены в новый класс Flow. Объекты Publisher производят элементы, которые потребляют один или несколько объектов Subscriber, и каждым из них управляет свой Subscription. Взаимодействие основано на простой форме управления потоком данных (метод Subscription.request для передачи back pressure), с помощью которой можно избежать проблем с управлением ресурсами, иначе возможных в системах на основе «push». Предоставлен вспомогательный класс SubmissionPublisher, с помощью которого разработчики могут создавать собственные компоненты.
    Эти (очень небольшие) интерфейсы соответствуют интерфейсам, определённым при широком участии сообщества (в рамках инициативы Reactive Streams), и обеспечивают совместимость между рядом асинхронных систем, работающих на JVM. Вложение интерфейсов в класс — консервативное решение, которое позволяет использовать их при различных краткосрочных и долгосрочных сценариях развития. Предоставлять сетевые компоненты или компоненты на основе ввода-вывода java.util.concurrent для распределённого обмена сообщениями не планируется, но возможно, что будущие выпуски JDK будут содержать такие API в других пакетах.

  2. Улучшения API CompletableFuture

    • Добавлены улучшения, связанные со временем, которые позволяют future завершиться значением или исключением по истечении заданного времени: см. методы orTimeout и completeTimeout. Кроме того, дополняющий их Executor, который возвращают статические методы с именем delayedExecutor, позволяет выполнить задачу по истечении заданного времени. Его можно сочетать с методами CompletableFuture, принимающими Executor, чтобы поддержать операции с задержками.
    • Добавлены улучшения для подклассов, которые упрощают наследование от CompletableFuture, например, чтобы создать подкласс, поддерживающий другой исполнитель по умолчанию.
  3. Многочисленные улучшения реализации, накопившиеся со времён JDK 8; многие из них небольшие, но некоторые включают изменение формулировок спецификации в Javadoc.

Тестирование

Участники JSR 166 EG, продолжающие работу, предоставляют функциональные тесты, тесты TCK и тесты производительности для всех компонентов.

Риски и допущения

Будут приняты меры, чтобы сохранить все небольшие, но необходимые различия в коде между репозиторием JDK 9 и репозиторием 166.