JavaTM Platform
Standard Ed. 6

패키지 java.util.concurrent

병행 프로그래밍으로 자주(잘) 사용되는 유틸리티 클래스입니다.

참조처:
          설명

인터페이스의 개요
BlockingDeque<E> 요소의 취득시에 양단 큐가 빈 상태(empty)이 아니게 될 때까지 대기하거나 요소의 포함시에 양단 큐내에 빈 곳이 생길 때까지 대기하는 블록 조작을 추가로 지원하거나 하는 Deque 입니다.
BlockingQueue<E> 요소의 취득시에 큐가 빈 상태(empty)이 아니게 될 때까지 대기하거나 요소의 포함시에 큐내에 빈 곳이 생길 때까지 대기하는 조작을 추가로 지원하는 Queue 입니다.
Callable<V> 결과를 돌려주어, 예외를 throw 하는 일이 있는 태스크입니다.
CompletionService<V> 새로운 비동기 태스크의 생성을, 완료필 태스크의 결과의 소비로부터 분리하는 서비스입니다.
ConcurrentMap<K, V> 추가의 원자적 putIfAbsent,remove, 및 replace 메소드를 제공하는 Map 입니다.
ConcurrentNavigableMap<K, V> NavigableMap 오퍼레이션을 지원하는 ConcurrentMap 입니다.
Delayed 일정한 지연의 후에 영향을 받는 객체에 마크부하기 위한 , 혼합 스타일의 인터페이스입니다.
Executor 송신된 Runnable 태스크를 실행하는 객체입니다.
ExecutorService 종료를 관리하는 메소드, 및 1 개(살) 이상의 비동기 태스크의 진행 상황을 추적하는 Future 를 생성할 수 있는 메소드를 제공하는 Executor 입니다.
Future<V> Future 는, 비동기 계산의 결과를 나타냅니다.
RejectedExecutionHandler ThreadPoolExecutor 로 실행할 수 없는 태스크의 핸들러입니다.
RunnableFuture<V> RunnableFuture 입니다.
RunnableScheduledFuture<V> RunnableScheduledFuture 입니다.
ScheduledExecutorService 지정된 지연 시간 후 또는 정기적으로 커멘드를 실행하도록(듯이) 스케줄 할 수 있는 ExecutorService 입니다.
ScheduledFuture<V> 취소해 가능한, 지연 된 결과 생성 액션입니다.
ThreadFactory 요구에 응해 새로운 thread를 작성하는 객체입니다.
 

클래스의 개요
AbstractExecutorService ExecutorService 실행 메소드의 디폴트 구현을 제공합니다.
ArrayBlockingQueue<E> 배열에 연동하는 바운드 형식블로킹 큐입니다.
ConcurrentHashMap<K, V> 취득의 완전한 동시성 및 예상되는 조정 가능한 갱신 병행성을 지원하는 해시 테이블입니다.
ConcurrentLinkedQueue<E> 링크 노드에 근거하는, 안 바운드 형식의 thread 세이프인입니다.
ConcurrentSkipListMap<K, V> 측정할 수 있는 병행 ConcurrentNavigableMap 구현입니다.
ConcurrentSkipListSet<E> ConcurrentSkipListMap 에 근거하는 측정할 수 있는 병행 NavigableSet 구현입니다.
CopyOnWriteArrayList<E> 기본으로 되는 배열의 새로운 카피를 작성하는 것으로써, 모든 추이적 조작 (add,set 등)이 구현되는 ArrayList 의 thread 세이프인 변수입니다.
CopyOnWriteArraySet<E> 모든 조작으로 내부 CopyOnWriteArrayList 를 사용하는 Set .
CountDownLatch 다른 thread로 실행중의 조작 세트가 완료할 때까지, 1 개(살) 이상의 thread를 대기 가능하게 하는 동기화 지원 기능입니다.
CyclicBarrier thread 세트의 각각이 공통의 배리어 포인트에 이를 때까지 대기하는 것을 가능하게 하는 동기화 지원 기능입니다.
DelayQueue<E extends Delayed> Delayed 요소의 안 바운드 형식블로킹 큐로, 지연 시간이 경과후에게만, 요소를 취득할 수 있습니다.
Exchanger<V> thread를 페어로 해, 페어내의 요소를 교환할 수 있는 동기 포인트.
ExecutorCompletionService<V> 태스크의 실행에, 지정된 Executors 를 사용하는 CompletionService 입니다.
Executors 이 패키지로 정의된 Executor ,ExecutorService ,ScheduledExecutorService ,ThreadFactory , 및 Callable 클래스용의 팩토리 및 유틸리티 메소드입니다.
FutureTask<V> 취소해 가능한 비동기 계산입니다.
LinkedBlockingDeque<E> 링크 노드에 근거하는, 임의의 바운드 형식블로킹 양단 큐입니다.
LinkedBlockingQueue<E> 링크 노드에 근거하는, 임의의 바운드 형식블로킹 큐입니다.
PriorityBlockingQueue<E> PriorityQueue 클래스와 같은 순서부 룰을 사용해, 블록 하는 취득 오퍼레이션을 제공하는, 안 바운드 형식블로킹 큐입니다.
ScheduledThreadPoolExecutor 지정된 지연 시간 후 또는 정기적으로 커멘드를 실행하도록(듯이) 추가로 스케줄 할 수 있는 ThreadPoolExecutor 입니다.
Semaphore 계수 세마포어-입니다.
SynchronousQueue<E> 각 삽입 오퍼레이션이 다른 thread에 의한 대응하는 삭제 오퍼레이션을 대기할 필요가 있는 ( 및 그 역의) 블로킹 큐 입니다.
ThreadPoolExecutor 풀 된 복수의 thread의 1 개를 사용해 송신된 각 태스크를 실행하는 ExecutorService 입니다.
ThreadPoolExecutor.AbortPolicy RejectedExecutionException 를 throw 하는 거부된 태스크의 핸들러입니다.
ThreadPoolExecutor.CallerRunsPolicy executor 가 종료 하고 있지 않는 경우에,execute 메소드의 호출로 거부된 태스크를 직접 실행한다, 거부된 태스크의 핸들러입니다.
ThreadPoolExecutor.DiscardOldestPolicy executor 가 종료 하고 있지 않는 경우에, 가장 낡은 미처리의 요구를 파기해 execute 를 재시행한다, 거부된 태스크의 핸들러입니다.
ThreadPoolExecutor.DiscardPolicy 거부된 태스크를 통지없이 파기하는 거부된 태스크의 핸들러입니다.
 

열거형의 개요
TimeUnit TimeUnit 는, 지정된 입도 단위로 시간을 나타내, 단위를 변환하거나 그러한 단위로 타이밍 및 지연 조작을 실행하거나 하는 유틸리티 메소드를 제공합니다.
 

예외의 개요
BrokenBarrierException thread가 고장 상태에 있는 배리어를 대기하려고 하고 있을 때, 또는 대기중에 배리어가 고장 상태가 되었을 때에, 예외를 throw 합니다.
CancellationException FutureTask 등의 값을 생성하는 태스크의 결과를, 그 태스크가 삭제되었기 때문에 취득할 수 없는 것을 나타내는 예외입니다.
ExecutionException 예외를 throw 하는 것에 의해 중단한 태스크의 결과를 취득하려고 했을 때에 throw 되는 예외입니다.
RejectedExecutionException 태스크의 실행을 받아들일 수가 없을 때에 Executor 에 의해 throw 되는 예외입니다.
TimeoutException 블록 조작이 타임 아웃 했을 때에 throw 되는 예외입니다.
 

패키지 java.util.concurrent 의 설명

병행 프로그래밍으로 자주(잘) 사용되는 유틸리티 클래스입니다. 이 패키지에는, 표준화 된 소규모의 확장 가능 시스템와 이용하지 않으면 구현이 귀찮음 또는 곤란하다 유용한 기능을 제공하는 클래스가 포함됩니다. 여기에서는, 주요한 컴퍼넌트에 대해 간단하게 설명합니다. locks 패키지와 atomic 패키지도 참조해 주세요.

executor

인터페이스. Executor 는, thread를 닮은 커스텀 하부조직 (thread 풀, 비동기 입출력, 경량 태스크 시스템등)을 정의하기 위한 , 표준화 된 단순한 인터페이스입니다. 사용하고 있는 구상 executor 클래스에 응해, 태스크는 새롭게 작성된 thread, 기존의 태스크 실행 thread, 또는 execute() 를 호출하는 thread로, 차례차례 또는 병행해 실행됩니다. ExecutorService 에서는, 보다 완전한 비동기 태스크 실행 시스템가 준비되어 있습니다. ExecutorService 는, 태스크의 큐잉과 스케줄 설정을 관리해, 제어된 종료을 가능하게 합니다. ScheduledExecutorService 서브 인터페이스 및 관련 인터페이스에서는, 지연 된 또는 정기적인 태스크 실행의 지원가 추가되고 있습니다. ExecutorService 에는,Callable (Runnable 에 유사해, 결과를 생성)로서 표현되는 임의의 함수의 비동기 실행을 조정하는 메소드가 준비되어 있습니다. Future 는, 함수의 결과를 돌려주거나 실행이 완료했는지 어떠했는지의 판단을 가능하게 하거나 하는 것 외에 실행을 취소하는 방법을 제공합니다. RunnableFuture 는,run 메소드를 소유하는 Future 로, 실행시에 그 결과를 설정합니다.

구현. ThreadPoolExecutor 클래스 및 ScheduledThreadPoolExecutor 클래스는, 조정 가능해 유연성의 높은 thread 풀을 제공합니다. Executors 클래스에는, 가장 일반적인 executor 의 종류와 설정을 위한 팩토리 메소드와 그러한 executor 를 사용하기 위한 유틸리티 메소드가 몇개인가 있습니다. executor 를 기본으로 한 그 외의 유틸리티에는, Future 의 일반적인 확장 가능 구현인 구상 클래스 FutureTask 나, 비동기 태스크의 그룹 처리의 조정을 지원하는 ExecutorCompletionService 등이 있습니다.

java.util.concurrent ConcurrentLinkedQueue 클래스는, 효율적으로 측정할 수 있는 thread 세이프의 비블록 FIFO 큐를 제공합니다. java.util.concurrent 로 확장 BlockingQueue 인터페이스를 지원하는 구현은 LinkedBlockingQueue ,ArrayBlockingQueue ,SynchronousQueue ,PriorityBlockingQueue , 및 DelayQueue 의 5 개가 있어, 이 인터페이스는 put 와 take 의 블록 버젼을 정의합니다. 다양한 클래스에서, 프로듀서 - 컨슈머(consumer), 메시징, 병렬 태스크 실행, 관련하는 병행 설계 등에 대하는 가장 일반적인 사용 문맥을 망라합니다. BlockingDeque 인터페이스는 BlockingQueue 를 확장해, FIFO 와 LIFO (스택 베이스)의 양쪽 모두의 오퍼레이션을 지원합니다. LinkedBlockingDeque 클래스에서는 구현을 제공합니다.

타이밍

TimeUnit 클래스에서는, 타임 아웃 베이스의 오퍼레이션의 지정 및 제어에 대해서, 복수의 입도 (나노초단위까지)를 제공합니다. 패키지의 대부분의 클래스에는, 무기한으로 대기하는 오퍼레이션 뿐만이 아니라, 타임 아웃 베이스의 오퍼레이션이 포함되어 있습니다. 타임 아웃을 사용하는 모든 경우로, 타임 아웃치는, 메소드가 타임 아웃 한 것을 나타낼 때까지 대기하는 최소 시간을 지정합니다. 타임 아웃의 발생 다음에 올 뿐(만큼) 빨리 그것을 검출하기 위해서, 구현에서는 「최선의 노력」을 지불합니다. 다만, 검출된 타임 아웃으로부터 그 타임 아웃 후에 thread가 실제로 재실행 될 때까지는, 무기한으로 시간이 경과하는 일도 있습니다. 타임 아웃 파라미터를 받아들이는 모든 메소드로, 제로 이하의 값을 전혀 대기하지 않는 것으로서 취급합니다. 「영원히」대기하는 경우는, 값 Long.MAX_VALUE 를 사용할 수 있습니다.

싱크로나이저

자주(잘) 이용되는 특화된 동기 방법을 지원하기 위해서 4 개의 클래스가 있습니다. Semaphore 는, 종래의 동시성 처리 툴입니다. CountDownLatch 는, 매우 단순합니다만 자주(잘) 사용되는 유틸리티로, 지정된 수의 시그널, 이벤트, 또는 조건을 보관 유지할 때까지 블록 합니다. CyclicBarrier 는, 리셋 가능한 다용도의 동기 포인트이며, 일부의 형식의 병행 프로그래밍으로 유용합니다. Exchanger 에서는, 2 개의 thread가 랑데뷰 포인트로 객체를 교환하도록 할 수 있습니다. 이것은, 몇개의 파이프라인 설계로 유용합니다.

동시성 처리 컬렉션

이 패키지에서는, Queue 외에도, multi-thread 문맥으로 사용하기 위해서 설계된 Collection 구현인 ConcurrentHashMap ,ConcurrentSkipListMap ,ConcurrentSkipListSet ,CopyOnWriteArrayList , 및 CopyOnWriteArraySet 가 제공됩니다. 많은 thread가 특정의 컬렉션에 액세스 하는 것이 상정되는 경우는, 일반적으로, 동기 된 HashMap 보다 ConcurrentHashMap, 동기 된 TreeMap 보다 ConcurrentSkipListMap 을 사용하는 것을 추천합니다. read와 traversal의 예상수가 리스트의 갱신수보다 훨씬 많은 경우는,ArrayList 보다 CopyOnWriteArrayList 를 사용하는 것을 추천합니다.

이 패키지의 일부의 클래스에 사용되는 「Concurrent」접두사는, 유사한 「synchronized」클래스와는 다른 점이 몇개인가 있는 것을 간결하게 나타내기 위한 것입니다. 예를 들어,java.util.HashtableCollections.synchronizedMap(new HashMap()) 는 동기 됩니다. 그러나,ConcurrentHashMap 는, 「병행」 (concurrent)입니다. 동시성 처리 컬렉션은 thread 세이프입니다만, 단일의 배타 락에 의한 제어를 받지 않습니다. ConcurrentHashMap 의 경우는, 임의의 수의 병행 read라고 조정 가능한 수의 병행 기입을 안전하게 허가합니다. 「synchronized」클래스는, 컬렉션에의 모든 액세스를 단일 락으로 막을 필요가 있는 경우에 도움이 됩니다. 다만, 스케이라비리티는 저하합니다. 한편, 복수의 thread가 공통의 컬렉션에 액세스 하는 것이 예상되는 경우, 일반적으로은 「concurrent」버젼이 적절합니다. 컬렉션이 공유되어 있지 않은 경우, 또는 다른 락을 보관 유지하고 있을 때 마셔 컬렉션에 액세스 가능한 경우는, 동기되어 있지 않은 컬렉션을 사용하는 것을 추천합니다.

또, 대부분의 동시성 처리 Collection 구현 (대부분의 Queue 를 포함한다)은, Iterator 가 fail-fast의 traversal는 아니고 「약일관성」을 제공하는 일반적으로의 java.util 규칙과도 다릅니다. 약일관성 반복자는 thread 세이프입니다만, 반복 처리시에 컬렉션을 다운 당할 필요는 없기 때문에, 반복자의 작성 후의 갱신 내용이 모두 반영되는 일도 있으면 반영되지 않는 것도 있습니다.

메모리 무결성 특성

Java 언어 스펙의 제 17 장에서는, 공유 변수의 읽고 쓰기등의 메모리 조작에 관한 happens-before 관계에 대해 정의되고 있습니다. 어느 thread에 의한 기입의 결과가, 다른 thread에 의한 read로 인식되는 것이 보증되는 것은, 기입 조작이 읽어들여 조작의 「전에 발생」 (happens-before) 했을 경우에 한정됩니다. synchronized 구문과 volatile 구문, 및 Thread.start() 메소드와 Thread.join() 메소드는,happens-before 관계를 형성할 수가 있습니다. 특히 다음의 점이 중요합니다. java.util.concurrent 및 그 서브 패키지내에 있는 모든 클래스의 메소드는, 이러한 보증을 보다 고레벨의 동기에게까지 확장합니다. 특히 다음의 점이 중요합니다.

도입된 버젼:
1.5

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.