자바 Concurrent 패키지
java.util.concurrent 패키지에 속한 클래스들로 동시성(concurrency) 작업을 위한 클래스들이다.
동시성이란 말에서 알 수 있듯 멀티 쓰레딩 환경에서 유용한 클래스들이다.
대표적으로 Executor, Callable, Future와 같이 비동기 작업을 위한 클래스나 인터페이스들이 있고, ConcurrentHashMap, ConcurrentLinkedQueue 처럼 비동기 환경에서 안전한 Collection 클래스들도 있다.
또한, lock을 위한 ReentrantLock 클래스도 있다.
1. Collection 클래스들
- CopyOnWriteArrayList
- BlockingQueue
- ConcurrentHashmap
관련 내용은 Collection과 Multi thread 포스팅을 참고할 것.
2. ReentrantLock
관련 내용은 자바의 Thread 포스팅을 참고할 것.
3. Executor
다수의 Thread를 사용하는 프로그램은 아래와 같은 문제가 있을 수 있다.
- 소규모 많은 요청이 들어올 경우 쓰레드 생성 및 종료에 따른 오버헤드가 발생한다.
- 생성되는 쓰레드 개수에 제한이 없기 때문에 OutOfMemoryError가 발생할 수 있다.
- 많은 수의 쓰레드가 실행될 경우, 쓰레드 스케줄링에 따른 오버헤드가 발생한다.
이런 문제들때문에 다수의 Thread를 사용하는 프로그램은 일반적으로 Thread pool을 구현하는데 java5에 추가된 Concurrency API의 Executor를 이용하면 이런 작업들을 쉽게 할 수 있다.
Executor는 interface로써 java api는 Thread pool, Queue 등을 사용하는 다양한 Executor 구현체를 제공한다.
public interface Executor {
void execute(Runnable command);
}
3.1 ScheduledThreadPoolExecutor
Runnable이나 Callble을 구현한 비동기 작업 구현체를 실행시키는 역할을 한다. 이 때 쓰레드 풀 관리 및 스케줄링을 할 수 있다.
4. Callable
Runnable과 다르게 리턴값을 받을 수 있는 작업 interface
5. Future
비동기 작업을 Callble 구현체로 만든 경우 리턴값을 받을 수 있는데 비동기작업이다 보니 리턴값을 바로 받을 수 없고 미래의 어느 시점에 받을 수 있다. 이때 미래의 특정 시점에 결과를 받기 위해 사용하는 Interface이다.
TODO Callable, Future 추가 정리 필요.
[참고문서]
댓글남기기