🔭
Ellery's study archive
Resume(수정중)GithubTistory
  • framework, library
    • Spring core
      • 스프링 트라이앵글 - POJO, IOC/DI, AOP, PSA
      • Servlet
    • Spring MVC
      • DispatcherServlet
      • Validation
    • Spring Boot
    • Spring Security
    • Spring Batch
    • Spring Webflux
    • JPA
    • JUnit, Spring Test
    • etc
      • Slf4j MDC(Mapped Diagnostic Context)
  • ETC, 개발 팁들
    • 개발 팁들
      • 스프링 프로젝트 init 시에 해야될 것들
      • vim 한글 깨질 때 인코딩 방식 지정
      • EC2 ssh connection 쉽게 하기
      • 리눅스 커맨드, netstats
      • Fork한 레포지토리 origin 업데이트
      • git merge, rebase
      • Intellij 자주 쓰는 기능 단축키
      • JSON handling
      • aws user-data.sh
    • Lombok annotation, 권장 방식
    • DB 모델링 시에 인조 식별자 정의하는 케이스
    • Redis pub/sub vs Apache kafka
  • Language
    • Java
      • 자바 버젼별 feature
      • JVM architecture
      • Garbage collection
      • Java String pool
      • java 8 Concurrent
      • Optional
      • Stream
      • Comparator, Comparator
      • Error, Exception
      • Java의 Call by value(pass by value)
      • Java 변수 간 값 Swap 방식 5가지
    • Javascript
      • 자주 쓰는 ES6 문법 정리
      • ES6 module
      • ES6 proxy
      • scope, var closure 이슈, let, const
    • Python
      • @lru_cache
  • CS
    • OS
      • Process, Thread
      • CPU scheduling
      • sync vs async, blocking vs nonblocking
      • Memory segmentation
      • virtual memory
      • 페이지 교체 알고리즘
    • Network
      • UDP
      • TCP
      • DNS
      • HTTP
      • web server, WAS
      • Proxy, Load balancer
      • web socket, WebRTC
      • gRPC
      • web secure
    • DB
      • MySQL
      • index
      • 정규화
      • DB 트랜잭션, 동시성 제어 문제
      • 클러스터링
      • 레플리케이션
      • 샤딩
    • Data Structure, Algorithm
      • AVL tree, Red black tree
      • B-tree, B*tree, B+tree
      • Hash
    • Design pattern
      • SOLID
      • 생성 패턴
        • 싱글톤 패턴
        • 팩토리 메서드 패턴
        • 빌더 패턴
        • Null 객체 패턴
      • 구조 패턴
        • 퍼사드 패턴
        • 프록시 패턴
        • 어댑터 패턴
        • 데코레이터 패턴
      • 행위 패턴
        • 전략 패턴
        • 템플릿 메서드 패턴
        • 상태 패턴
        • 옵저버 패턴
  • 소프트웨어 아키텍쳐
    • Layered Architecture
    • 클린 아키텍쳐
    • DDD
    • etc
      • DTO vs VO
  • 개발 서적들
    • 소트웍스 앤솔로지에서 소개되는 객체지향 생활 체조 원칙 간략 정리
    • 엘레강트 오브젝트 - 새로운 관점에서 바라본 객체지향
    • 만들면서 배우는 클린 아키텍쳐
  • 테크 블로그
Powered by GitBook
On this page
Edit on GitHub
  1. Language
  2. Java

java 8 Concurrent

리액티브 자바는 나중에 정리... 너무 어렵다

  • Concurrent programming - Executor, Callable, Future, CompletableFuture

    • Thread 상속을 통해서 쓰레드 구현하는 것과 Runnable을 구현해서 쓰레드 구현하는 것을 알아야함

    • 쓰레드의 주요 기능들 sleep, interrupt, join. 이것 만으로는 어떤 작업을 멀티스레딩 처리하는 것이 힘듬. 좀 더 고수준의 Concurreny 프로그래밍이 필요함

    • Executors - 쓰레드 관리 작업을 애플리케이션에서 분리하고 Executors에 위임.

      • 쓰레드 만들기, 관리, 작업처리 및 실행 API 제공

      • 주로 ExecutorService를 쓰게 됨

      • 쓰레드로 태스크 하나를 처리했다면 명시적으로 종료하지 않으면 대기하게 됨. shutdown() : graceful shutdown. 지금까지의 작업은 다 마치고 shutdown, 당장 끝내고 싶다면 shutdownNow()

      • 자바 Main에서 ExecutorService 실행했을 때 의 ES 구조: 쓰레드 풀 앞에 blocking queue가 있음. 쓰레드에서 작업을 처리하는 동안 blocking queue에 쌓아둠

    • Callable, Future - runnable은 타입이 void인 단점이 있음. Java 1.5의 Callable을 이용해서 리턴을 할 수 있음. 이 리턴값을 받아오는 것이 Future이다.

      • isDone(), cancel(), invokeAll(), invokeAny()

    • CompletableFuture

      • java 1.5의 Future, CompletionStag를 구현해놓음

      • 비동기 처리가 쉬워짐.

      • executor를 구현한 ForkJoinPool은 deque를 사용해서 자기 쓰레드가 할일이 없으면 deque에서 작업을 가져와서 처리함. 한 작업의 sub작업을 다른 쓰레드에 배분함

      • 비동기 작업실행- RunAsync(), supplyAsync()

      • 콜백 제공- thenApply(F), thenAccept(Consumer), thenRun(Runnable)

      • 조합

        • thenCompose() - 서로 연관관계(의존성)이 있을 경우

        • thenCombine() - 별개의 작업 ex) 각각의 주식가격을 로드하고 다 처리됬을 때 다음 작업을 처리하는 경우

        • allOf() - (태스크가 반환값이 있어야 작업처리 확인이 쉬움) 모든 태스크가 다 끝났다면, thenAccept()…로 처리한다.

        • anyOf() - 가장 먼저 끝난 하나의 작업에 콜백 실행

      • 예외처리

        • exeptionally(Func) - 에러 처리

        • handle(BiFunction) - good, error 처리

PreviousJava String poolNextOptional

Last updated 2 years ago

https://ellerymoon.tistory.com/118
Java 8 Concurrency Tutorial: Threads and Executorswinterbe_
Logo