В JAVA8 добавлен Stream API, а Stream API предоставляет программистам метод foreach для обхода коллекции:java.util.stream.Stream#forEach
.
Итак, что вы знаете об этом методе foreach? Приходите и ответьте на эти вопросы.
Вопрос 1: Является ли foreach последовательным потреблением?
Как название. Является ли foreach последовательным потреблением?
Мой ответ: не обязательно.
вызов в параллельном потокеjava.util.stream.Stream#forEach
Метод не гарантирует порядок потребления элементов.
Если вам нужно обеспечить последовательное потребление элементов в параллельных потоках, вам нужно использоватьjava.util.stream.Stream#forEachOrdered
метод.
Вопрос 2: Является ли foreach быстрым сбоем
Не много ерунды, переходим непосредственно к коду, видишь, значит веришь:
Из примера программы мы можем узнать, что программа действительно бросаетConcurrentModificationException
исключение, ноjava.util.stream.Stream#forEach
Время, когда метод генерирует исключение, наступает после использования всех исходных элементов, а не в отказоустойчивом режиме, как это делают итераторы.
Вопрос 3: Что происходит, когда элементы добавляются до foreach?
Каков результат выполнения следующего кода? Будет ли это вызывать исключение?
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
Stream<Integer> stream = list.stream();
list.add(6);
stream.forEach(System.out::println);
}
Подумайте минуту.
Правильный ответ: исключение не генерируется, и выводится измененный элемент. Результат выполнения следующий:
Операция
Заключительный вопрос:java.util.stream.Stream#forEach
Как реализован базовый метод? Заинтересованные студенты могут самостоятельно просмотреть исходный код, а анализ исходного кода будет обновлен в следующем выпуске.
Приглашаем обратить внимание на личный публичный номер: