자바 7(포크/조인 프레임워크)이 등장하기 전에는 데이터를 서브파트로 분할하여 각각 스레드로 할당해야 된다. 의도치 않은 레이스 컨디션이 발생하지 않도록 적적한 동기화를 추가하여 마지막으로 부분 결과를 합쳐야 한다. 7.1 병렬 스트림 병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. (parallelStream) public static long parallelSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel() //스트림을 병렬 스트림으로 변환 .reduce(0L,Long::sum); } 이전 코드와 다른점은 parallel 메서드를 통해서 스트림이 여러 청크로 분활되어 있다..
컬렉션(Collection), 컬렉터(Collector), collect를 주의하며 학습하자 6.1 컬렉터란 무엇인가? 명령형 프로그래밍과 함수형 프로그래밍의 차이 명령형 프로그래밍 private static void groupImperatively() { Map transactionsByCurrencies = new HashMap(); for (Transaction transaction : transactions) { Currency currency = transaction.getCurrency(); List transactionsForCurrency = transactionsByCurrencies.get(currency); if (transactionsForCurrency == null) { tran..
스트림 API는 내부적으로 다양한 최적화가 이루어져 내부 반복 뿐 아니라 코드를 병렬로 실행할지 여부도 결정할 수 있다. 순차적인 반복을 단일 스레드로 구현하는 외부 반복으로는 스트림 API만큼의 최적화를 달성할 수 없다. 필터링 Predicate를 이용해서 스트림의 요소를 선택하는 방법 Stream filter(Predicate
컬렌션 관련 연산을 SQL처럼 선언형으로 연산을 표현할 수 없을까? 이 장의 내용 스트림이란 무엇인가? 컬렉션과 스트림 내부반복과 외부 반복 중간연산과 최종 연산 4.1 스트림이란 무엇인가? 스트림(Stream)은 자바 8 API에서 새로 추가된 기능이다. 스트림을 이용하면 선언형(데이터를 처리하는 임시 구현 코드 대신 질의로 표현)으로 컬렉션 데이터를 처리할 수 있다. 스트림을 통해서 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 기존 코드(자바7) List lowCaloricDishes = new ArrayList(); for(Dish dish : menu) { if(dish.getCalories() < 400) { lowCaloricDishes.add(dish); } ..
이 장의 내용 람다란 무엇인가? 어디에, 어떻게 람다를 사용하는가? 실행 어라운드 패턴 함수형 인터페이스, 형식 추론 메서드 참조 람다 만들기 람다란 무엇인가? 3.1 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 익명 public String ummm...() { return "메서드 이름을 뭐로 해야돼!!!"; } 보통의 메서드와 달리 이름이 없어 구현해야 할 코드에 대한 걱정거리가 줄어든다. 함수 @Service @RequiredArgsConstructor public class OrderService { private final ProductRepository productRepository; private final OrderReposito..
uhanuu
'책' 카테고리의 글 목록 (3 Page)