Open Mingadinga opened 1 year ago
스레드를 직접 다루면 Thread가 작업 단위와 수행 매커니즘 역할을 모두 수행하게 된다. 그보다는 실행자 프레임워크를 사용해 작업 단위와 실행 매커니즘을 분리하고, 작업 수행을 위임하는 것이 좋다.
java.util.concurrent 패키지는 실행자 프레임워크 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다.
java.util.concurrent
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(runnable);
exec.shutdown();
get
invokeAny
invokeAll
awaitTermination
ExecutorCompletionService
ScheduledThreadPoolExecutor
실행자 서비스를 사용하기 까다롭다면, 스레드 풀을 만들어 사용할 수 있다.
CachedThreadPool
ThreadPoolExecutor
태스크 == 작업 단위
자바 7부터 실행자 프레임워크는 포크 조인 태스크를 지원한다.
포크 조인 태스크는 포크 조인 풀이라는 특별한 실행자 서비스가 실행한다.
병렬 스트림
import java.math.BigInteger; import java.util.stream.LongStream; public class ParallelPrimeCounting { // Prime-counting stream pipeline - parallel version (Page 225) static long pi(long n) { return LongStream.rangeClosed(2, n) .parallel() .mapToObj(BigInteger::valueOf) .filter(i -> i.isProbablePrime(50)) .count(); } public static void main(String[] args) { System.out.println(pi(10_000_000)); } }
실행자 프레임워크
java.util.concurrent
패키지는 실행자 프레임워크 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다.주요 API
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(runnable);
exec.shutdown();
get
invokeAny
invokeAll
awaitTermination
ExecutorCompletionService
이용ScheduledThreadPoolExecutor
이용CachedThreadPool과 ThreadPoolExecutor
실행자 서비스를 사용하기 까다롭다면, 스레드 풀을 만들어 사용할 수 있다.
CachedThreadPool
ThreadPoolExecutor
실행자 프레임워크 사용의 장점
태스크 == 작업 단위
포크 조인 풀 fork-join pool과 스트림
자바 7부터 실행자 프레임워크는 포크 조인 태스크를 지원한다.
포크 조인 태스크는 포크 조인 풀이라는 특별한 실행자 서비스가 실행한다.
병렬 스트림
을 이용하면 적은 노력으로 그 이점을 얻을 수 있다.