Arhn - архитектура программирования

Является ли Stream.toArray() потокобезопасным изменяемым сокращением?

Операция сбора в Java 8 Stream API определяется как изменяемое сокращение, которое можно безопасно выполнять параллельно, даже если результирующее Collection не является потокобезопасным.

Можем ли мы сказать то же самое о методе Stream.toArray()?

Является ли этот метод изменяемым сокращением, которое является потокобезопасным, даже если Stream является параллельным потоком, а результирующий массив не является потокобезопасным?


  • результирующий массив не является потокобезопасным - что вы имеете в виду? 01.02.2016

Ответы:


1

Операция toArray является разновидностью изменяемой редукции, хотя и не реализована точно так же, как операция collect. Напротив, в некоторых случаях это более эффективно. Но это неуказанные детали реализации. Сама документация toArray ничего не говорит о том, как она реализована, поэтому по вашему вопросу вам придется прибегнуть к более общим утверждениям:

документация по пакету, «Параллелизм»

… Все операции с потоками могут выполняться как последовательно, так и параллельно.

За исключением операций, определенных как явно недетерминированные, таких как findAny(), независимо от того, выполняется ли поток последовательно или параллельно, результат вычислений не должен меняться.

Большинство потоковых операций принимают параметры, описывающие заданное пользователем поведение, которые часто представляют собой лямбда-выражения. Чтобы сохранить правильное поведение, эти поведенческие параметры должны быть не влияющими и в большинстве случаев должны быть без сохранения состояния.

Таким образом, независимо от того, как это реализовано, toArray является потоковой операцией, которая может выполняться параллельно, и, поскольку она не имеет каких-либо ограничений или недетерминированного поведения, она будет давать тот же (правильный) результат, что и в последовательном режиме. Это единственное, о чем вы должны думать.

Но если вы используете перегруженный метод toArray(IntFunction), вы несете ответственность за предоставление соответствующей функции, например. SomeType[]::new всегда невмешательна и не имеет состояния, поэтому форма toArray(SomeType[]::new) также является потокобезопасной.

01.02.2016

2

Согласно https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#toArray-java.util.function.IntFunction- так и должно быть, поскольку они создают

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

И в дедукции, поскольку Stream.toArray() есть не что иное, как stream.toArray(Object[]::new), это должно быть верно и для Stream.toArray().

01.02.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..