После того, как java8 параллельно () и последовательного () включается параллельно с потоком параллельного потока
пакет потока; импорт java.time.Duration; импорт java.time.Instant; импорт java.util.concurrent.ForkJoinPool; импорт java.util.concurrent.ForkJoinTask; импорт java.util.concurrent.RecursiveTask; импорт java.util.stream.LongStream; / ** * @autour ZDC * @create 2020-03-24-23: 53 * / общественный класс ForkJoinCaculate расширяет RecursiveTask <Long> { частный статический окончательный длинный serialVersionUID = 1222222L ; частный Длинный старт; частный длинный конец; частный статический длинный THESHOLD = 10000L ; общественный ForkJoinCaculate (Long начала, длинный конец) { это .start = старт; это .end = конец; } @Override защищен Длинный вычислить () { длинную длину = КОНЕЦ начала; если (длина < THESHOLD) { длинная сумма = 0 ; для ( длиной I = старт; я <= конец, я ++ ) { сумма + = я; } Вернуть сумму; } Иначе { Длинные середины = (начало + конец) / 2 ; ForkJoinCaculate влево = новый ForkJoinCaculate (начало, середина); left.fork (); ForkJoinCaculate право = новый ForkJoinCaculate (середина + 1 , конец); right.fork (); вернуть left.join () + right.join (); } } Общественных статических пустот основных (String [] арг) { Немедленный старт = Instant.now (); ForkJoinPool бассейн= Новый ForkJoinPool (); ForkJoinTask <Long> задача = новый ForkJoinCaculate (0L, 1000000000l ); Длинная сумма = pool.invoke (задача); System.out.println (сумма); Мгновенный конец = Instant.now (); System.out.println (Duration.between (начало, конец) .toMillis ()); Мгновенный start1 = Instant.now (); Подводя = 0L ; для (Long I = 0L; я <= 1000000000l; я ++ ) { сумма + = я; } System.out.println (сумма); END1 Мгновенный = Instant.now (); System.out.println (Duration.between (Start1, END1) .toMillis ()); // Параллельный () и последовательный () включен параллельно с потоком параллельного потока после того, как java8 Long SUM1 = LongStream .rangeClosed (0, 1 миллиард) .reduce (0 , Лонг :: SUM); Длинный . LongStream.rangeClosed SUM2 = (0, 1 миллиард) .parallel () для уменьшения (0 , Лонг :: SUM); Длинный sum3 = LongStream.rangeClosed . (0, 1 миллиард) .sequential () для уменьшения (0 , Лонг :: SUM); System.out.println (SUM2); } }
Необязательный
@Test общественности недействительным Test3 () { // Дополнительное судно способно быстро заблокировать NullPointerException NullPointerException избежать неприятностей факультативным <Человек> OP = Optional.of ( новый новый Человек ( "ZZZ", 33 , 445d внешней)); // Необязательный <Человек> Optional.of OP1 = (нуль); // сообщили ненормальное факультативным <Человек , > Optional.empty OP3 = (); // создать пустой экземпляр // System.out.println (op3.get () ); // сообщили ненормальное // перейти Null Null построить экземпляр объекта передается через строительство комплекса и пустые факультативный <Человека , > OP4 = Optional.ofNullable ( нуль ); факультативный <Человека , > OP5 = Optional.ofNullable ( новый новыйЧеловек ( "ZZ", 22,11.3 )); IF (op3.isPresent ()) { System.out.println ( "op3w не пустой" ); } еще { System.out.println ( "nulll" ); } // OP3 возвращать нулевое значение заданного OrElse (Т Т) Лицо ZZZ = op3.orElse ( новый новое лицо ( «ZZZ», 22, 22,2 )); // orElseGet (Поставщик ей) возвращаемое значение ы OP3. orElseGet (Человек :: новый новый ); // возвращает нулевой аргумент конструктора , поскольку интерфейсы Поставщика // Карта процесс , если его значение Необязательного <String> op5.map S = (P -> p.getName ()); / / flatMap возвращение Дополнительно Опция <String> s1 = op5.flatMap (р -> Optional.of (p.getName ())); }
Решить исключения нулевого указателя:
пакет потока; / ** * @autour ZDC * @create 2020-03-25-01: 00 * / общественный класс Dog { частный Струнный мяч; общественные собаки () { } общественного собака (String шар) { это .ball = шар; } Публичная строка getBall () { возвращение мяч; } Общественности статической недействительный основной (String [] арг) { собака собака = новый Dog (); dog.getBall (); // 发生空指针异常 System.out.println (dog.getBall () длина ().); // 解决方法 если (собака! = NULL ) { Строка шар = dog.getBall (); если (шар! = NULL ) System.out.println (ball.length ()); } } }
Дополнительно заменить
пакет потока; импорт javax.swing.text.html.Option; импорт java.util.Optional; / ** * @autour ZDC * @create 2020-03-25-01: 00 * / общественного класса Dog { // 注意!!! частный Необязательный <String> шар = Optional.empty (); общественные собаки () { } общественного Собака (Необязательно <String> шар) { это .ball = шар; } Общественного Дополнительно <String> getBall () { возвращение мяч; } Общественности статической недействительнымОсновной (String [] арг) { Дополнительно <Dog> собаки = Optional.ofNullable ( нуль ); Указатель на строку = dog.orElse ( новый . Собака ()) getBall () OrElse ( "默认的球". ); System.out.println (ы); } }