- 동시에 여러 작업을 할 수 있는 소프트웨어
- ex) 한글작업을 하면서 유튜브로 음악듣기
- 멀티 프로세싱 -->
ProcessBuilder사용- 멀티 쓰레딩 -->
Thread,Runnable,Executors,Callable등 사용
- sleep
- 현재 쓰레드 멈추기
자원에 대한 락을놓아주지는 않고,제어권을넘겨주는 것(데드락 조심해야 함)- interupt
- 다른 쓰레드를 깨워서
interruptedException을발생시키는 것예외를 발생시킨 후종료하거나다른일을 수행하게 할 수 있다 (설계 나름)- join
해당 쓰레드 작업이 끝날 때까지기다리게 하는 것쓰레드의 순서를제어할 때 사용할 수 있음
Java에서멀티 쓰레드를 통해Concurrent를 처리할 때개발자가쓰레드를 직접 하나하나 관리하기는 힘듬- 이렇게
쓰레드를 만들고 관리하고 작업을처리하는 것을Executors에게위임해서 처리한다
- 고수준 (
High-Level)Concurrency 프로그래밍쓰레드를 만들고 관리하는 작업을애플리케이션에서분리해서 관리
- 쓰레드 만들기 :
애플리케이션에서 사용될 쓰레드를만들거나,쓰레드 풀을 통해 관리- 쓰레드 관리 :
쓰레드의 생명 주기를 관리- 작업 처리 및 실행 :
쓰레드로 작업을 수행하기 위한API를 제공
- Executor.execute(
Runnable) or Executor.submit(Runnable)
- 쓰레드 작업 수행
- Executor.shutdown() :
할일을 모두 마치고종료- Executor.shutdownNow() :
지금 당장종료
- ExecutorService
Executor를상속받은인터페이스Runnable과Callable모두 실행 가능Executor를종료하거나,여러 Callable을동시에 실행할 수도 있음
- ScheduledExecutorService
ExecutorService를상속받은인터페이스특정 시간 이후에 또는주기적으로작업을 수행하게 하는스케줄기능
설명
Runnable과 같은쓰레드 생성에 사용되는인터페이스Runnable은반환(return) 타입이void-->처리 결과를 받을 수 XCallable은반환(return) 타입이객체-->처리 결과를 받을 수 O
설명
비동기적인 작업의현재 상태를 조회하거나결과를 가져오기 위한객체Runnable/Callable의상태를 조회하거나결과를 확인하기 위해 사용시간이 걸릴 수 있는 작업을Future 내부에 작성하고,
호출자 스레드가 결과를 기다리는 동안다른유용한 작업을 할 수 있음
--> 실행을 맞기고미래 시점에 결과를 얻는 것으로 이해 가능처리 결과에 대한콜백을 정의할 수 없어서이후에CompletableFuture이등장함.get()을 통해서 블로킹(Blocking) 콜을 수행
:.get()을 통해서결과를 확인하기 위해결과를 기다린다--> 블로킹(Blocking)
get() & isDone()
.get()
- 블로킹(
Blocking) 콜 :작업의 처리 결과를get하기 위해서결과를 기다리게된다(Blocking 상태).isDone()
작업이 완료되었으면true/ 아니면false반환
cancel()
.cancel()
- 파라미터 값
- true :
작업 interupt하고종료- false :
작업이 끝날 때 까지 대기후종료- 결과 값
- true :
정상적으로 cancel 수행 O- false :
정상적으로 cancel 수행 X
invokeAll()
.invokeAll()
동시에 실행한 작업중제일 오래 걸리는 작업만큼시간 소요모든 결과가 수행된 뒤처리되어야 할 때 사용
invokeAny()
.invokeAny()
여러 작업중하나라도 먼저 응답이 오면끝난다동시에 실행한 작업중제일 짧게 걸리는 작업 만큼 시간 소요같은 일을여러 쓰레드를 통해 수행한 뒤먼저 응답이 오면 사실상나머지는 필요가 X블로킹 콜로 동작