일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 완주하지 못한 선수
- 정렬
- 스택/큐
- H-index
- 쿠버네티스
- @configuration
- 루씬 인 액션
- 프로그래머스
- 커링
- 코딩 테스트
- @Data
- 가장 큰 수
- 전화번호 목록
- 알고리즘
- 크론 표현식
- @Getter
- @Setter
- 다리를 지나는 트럭
- 스프링 스케쥴러
- 검색 기능 확장
- Java
- kubenetes
- 해시
- 영속 자료구조
- K번째수
- 롬복 어노테이션
- 모던 자바 인 액션
- 고차원 함수
- 기능개발
- @EnableScheduling
- Today
- Total
목록JAVA & Spring/모던 자바 인 액션 (23)
Today I Learned
16.4 비동기 작업 파이프라인 만들기 public class Discount { public enum Code { NONE(0), SILVER(5), GOLD(10), PLATINUM(15), DIAMOND(20); private final int percentage; Code(int percentage) { this.percentage = percentage; } } ... } enum으로 할인율을 제공하는 코드를 정의하였다. 그리고 getPrice 메서드는 ShopName:price:DiscountCode 형식의 문자열을 반환하도록 수정했다. public String getPrice(String product) { double price = calcuatePrice(product); Discount..
이 장의 내용 비동기 작업을 만들고 결과 얻기 비블록 동작으로 생산성 높이기 비동기 API 설계와 구현 동기 API를 비동기적으로 소비하기 두 개 이상의 비동기 연산을 파이프라인으로 만들고 합치기 비동기 작업 완료에 대응하기 16.1 Future의 단순 활용 시간이 걸릴 수 있는 작업을 Future 내부로 설정하면 호출자 스레드가 결과를 기다리는 동안 다른 작업을 할 수 있다. Future 작업은 ExecutorService에서 제공하는 스레드에서 처리되고, 작업의 결과가 필요한 시점에 Future의 get 메서드로 결과를 가져올 수 있다. 하지만 get 메서드를 호출했을 때 결과가 준비되어있지 않다면 작업이 완료될 때까지 스레드를 블록시킨다. 16.1.1 Future 제한 Future 인터페이스에는 비..
15.3 박스와 채널 모델 박스와 채널 모델은 동시성을 설계하고 계념화하기 위한 모델이다. 박스와 채널 모델을 이용하면 생각과 코드를 구조화할 수 있으며, 시스템 구현의 추상화 수준을 높일 수 있다. 박스로 원하는 연산을 표현하면 계산을 손으로 코딩한 결과보다 더 효율적일 것이다. 또한 병렬성을 직접 프로그래밍하는 관점을 콤비네이터를 이용해 내부적으로 작업을 처리하는 관점으로 바꿔준다. 위 태스크를 코드로 구현해보자. int t = p(x); System.out.println(r(q1(t), q2(t)); 위 방식은 q1, q2를 차례로 호출하여 하드웨어 병렬성 활용과는 거리가 멀다. int t = p(x); Future a1 = executorService.submit(() -> q1(t)); Futu..
이 장의 내용 Thread, Future, 자바가 풍부한 동시성 API를 제공하도록 강요하는 진화의 힘 비동기 API 동시 컴퓨팅의 박스와 채널 뷰 CompletableFuture 콤비네이터로 박스를 동적으로 연결 리액티브 프로그래밍용 자바 9 플로 API의 기초를 이루는 발행 구독 프로토콜 리액티브 프로그래밍과 리액티브 시스템 15.1 동시성을 구현하는 자바 지원의 진화 Runnable, Thread → ExecutorService, Callable, Future, 제네릭 → RecursiveTask → 람다 → 분산 비동기 프로그래밍 15.1.1 스레드와 높은 수준의 추상화 자바 스트림을 사용하면 외부반복(명시적 루프) 대신 내부반복을 통해 쉽게 병렬성을 달성할 수 있다. sum = Arrays.st..