|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요 : 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.util.concurrent.AbstractExecutorService
java.util.concurrent.ThreadPoolExecutor
public class ThreadPoolExecutor
풀 된 복수의 thread의 1 개를 사용해 송신된 각 태스크를 실행하는 ExecutorService
입니다. 일반적으로은 Executors
팩토리 메소드를 사용해 구성됩니다.
thread 풀에서는, 2 개의 문제에 대처합니다. 우선, 태스크 근처의 호출 오버헤드가 감소하기 위해(때문에), 일반적으로은 대량의 비동기 태스크의 실행시에 퍼포먼스가 향상합니다. 또, 태스크의 컬렉션을 실행할 경우에 소비되는 자원 (thread를 포함한다)의 경계 설정 및 관리를 위한 방법을 제공합니다. 각 ThreadPoolExecutor 도 기본적인 통계 정보 (완료한 태스크의 수등)를 보관 유지합니다.
폭넓은 문맥으로 유용하기 때문에 , 이 클래스에서는 많은 조정 가능한 파라미터나 확장성 훅을 제공합니다. 다만 프로그래머는, 보다 편리한 Executors
팩토리 메소드인 Executors.newCachedThreadPool()
(자동 thread 재생이 있는 안 바운드 형식의 thread 풀),Executors.newFixedThreadPool(int)
(고정 사이즈의 thread 풀), 및 Executors.newSingleThreadExecutor()
(단일 백그라운드의 thread)를 사용해 주세요. 이러한 팩토리 메소드는, 가장 일반적인 사용을 상정한 설정을 사전 설정합니다. 그렇지 않은 경우, 이 클래스를 수동으로 설정해 조정할 때는 다음의 가이드에 따라 주세요.
getCorePoolSize()
를 참조)와 maximumPoolSize (getMaximumPoolSize()
를 참조)로 설정된 경계에 따라,ThreadPoolExecutor 는 자동적으로 풀 사이즈를 조정합니다 (getPoolSize()
를 참조). 새로운 태스크가 execute(java.lang.Runnable)
메소드로 송신되어 corePoolSize 보다 적은 수의 thread가 실행중인 경우는, 그 외의 워크스 레드가 IDLE 상태여도, 요구를 처리하기 위해서 새로운 thread가 작성됩니다. corePoolSize 보다 많아, maximumPoolSize 보다 적은 수의 thread가 실행중인 경우, 새로운 thread가 작성되는 것은 큐가 가득해 있는 경우만입니다. corePoolSize 와 maximumPoolSize 를 같은 값으로 설정하면(자), 고정 사이즈의 thread 풀이 작성됩니다. maximumPoolSize 을 Integer.MAX_VALUE 등의 실질적으로 안 바운드 형식인 값으로 설정하면(자), 풀에 임의의 수의 병행 태스크를 포함할 수가 있습니다. 코어 풀 사이즈와 최대 풀 사이즈는 구축시에게만 설정되는 것이 가장 일반적입니다만,setCorePoolSize(int)
및 setMaximumPoolSize(int)
를 사용해 동적으로 변경할 수도 있습니다. prestartCoreThread()
또는 prestartAllCoreThreads()
메소드를 사용해 동적으로 오버라이드(override) 할 수 있습니다. 빈 상태(empty)이 아닌 큐로 풀을 구축하는 경우는, thread를 사전에 기동할 수도 있습니다. ThreadFactory
를 사용해 작성됩니다. 특히 지정이 없는 경우는,Executors.defaultThreadFactory()
가 사용됩니다. 이 경우에 작성되는 thread는, 모두 같은 ThreadGroup
내에 있어, 같은 NORM_PRIORITY 우선 순위와 비demon 상태를 가집니다. 다른 ThreadFactory 를 지정하면(자), thread의 이름, thread 그룹, 우선 순위, demon 상태등을 변경할 수 있습니다. 요구시에 newThread 로부터 null 가 돌려주어져 ThreadFactory 가 thread의 작성에 실패하면(자), executor 는 속행합니다만, 태스크를 전혀 실행할 수 없을 가능성이 있습니다. getKeepAliveTime(java.util.concurrent.TimeUnit)
를 참조). 이것에 의해, 풀이 액티브하게 사용되어 있지 않을 때의 자원의 소비량을 줄일 수가 있습니다. 풀이 나중에 액티브하게 되면(자), 새로운 thread가 구축됩니다. 이 파라미터는,setKeepAliveTime(long, java.util.concurrent.TimeUnit)
메소드를 사용해 동적으로 변경할 수 있습니다. Long.MAX_VALUE TimeUnit.NANOSECONDS
의 값을 사용하면(자), 아이돌 thread가 종료전에 종료하는 일도 실질적으로 무효가 됩니다. 디폴트에서는, corePoolSizeThreads 를 넘는 경우에게만 킵얼라이브 정책를 적용합니다. 다만 keepAliveTime 의 값이 제로 이외이면,allowCoreThreadTimeOut(boolean)
메소드를 사용해, 이 타임 아웃 정책를 코어 thread에도 적용할 수가 있습니다. BlockingQueue
는, 송신된 태스크를 전송 및 보관 유지하기 위해서 사용할 수 있습니다. 이 큐의 사용은, 풀의 사이즈 설정과 서로 작용합니다.
SynchronousQueue
입니다. SynchronousQueue
는, 본래는 태스크를 보관 유지합니다. 이 경우, 태스크를 실행하기 위해서 곧바로 이용할 수 있는 thread가 없으면 태스크를 큐에 넣으려고 했을 때에 실패해, 새로운 thread가 구축됩니다. 이 정책에 의해, 내부적인 의존관계(dependencies)를 가질 가능성이 있는 요구 세트의 처리시에 록 업이 회피됩니다. 일반적으로 직접 핸드 오프에서는, 송신된 새로운 태스크가 거부되는 것을 회피하기 위해서, 안 바운드 형식의 maximumPoolSizes 가 필요합니다. 이것에 의해, 평균해 처리 능력을 넘는 속도로 커멘드가 차례차례로 도착하면(자), 안 바운드 형식의 thread가 커질 가능성이 있습니다. LinkedBlockingQueue
등)를 사용하면(자), corePoolSize 의 모든 thread가 Busy 상태인 경우에, 새로운 태스크는 큐내에서 대기합니다. 이것에 의해, corePoolSize 를 넘는 thread는 작성되지 않게 됩니다. 즉 maximumPoolSize 의 값은 효과가 없어집니다. 각 태스크가 완전하게 독립하고 있기 (위해)때문에, 태스크가 상호의 실행에 영향을 주지 않는 경우는 이 방식이 적절하다라고 하는 것이 있습니다 (Web 페이지 서버의 경우 등). 이 방식의 큐잉은, 일시적으로 급증한 요구를 처리하는 경우 등은 편리합니다만, 평균해 처리 능력을 넘는 속도로 커멘드가 차례차례로 도착하면(자), 안 바운드 형식의 워크 큐가 커질 가능성이 있습니다. ArrayBlockingQueue
등)는, 한정된 maximumPoolSizes 로 사용하면(자) 자원 부족을 회피할 수 있습니다만, 조정과 제어가 어려워질 가능성이 있습니다. 큐 사이즈와 최대 풀 사이즈는 서로 트레이드 오프의 관계가 되는 일이 있습니다. 큰 큐와 작은 풀을 사용하면(자), CPU 사용율, OS 자원량, 및 콘테키스트스잇팅의 오버헤드는 최소화됩니다만, throughput는 큰폭으로 저하할 가능성이 있습니다. 태스크가 빈번하게 블록 하는 경우는 (입출력이 제한되는 경우 등), 허가하고 있는 thread수보다 많은 thread에 대해서, 시스템이 시간을 스케줄 할 수가 있습니다. 작은 큐를 사용하면(자), 일반적으로 필요한 풀 사이즈는 커집니다. 이것에 의해, CPU 가 보다 Busy가 됩니다만, 과대한 스케줄 설정의 오버헤드가 발생하는 일이 있어, throughput도 저하합니다. execute(java.lang.Runnable)
메소드로 송신된 새로운 태스크는 거부됩니다. 어느 쪽의 경우도,execute 메소드는,RejectedExecutionHandler
의 RejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor)
메소드를 호출합니다. 사전 정의된 4 개의 핸들러 정책가 준비되어 있습니다.
ThreadPoolExecutor.AbortPolicy
에서는, 거부되면(자), 핸들러는 실행시 RejectedExecutionException
를 throw 합니다. ThreadPoolExecutor.CallerRunsPolicy
에서는,execute 자체를 호출하는 thread가 태스크를 실행합니다. 이것에 의해, 단순한 피드백 제어 기구가 제공되어 결과적으로 새로운 태스크의 송신 레이트가 저하합니다. ThreadPoolExecutor.DiscardPolicy
에서는, 실행할 수 없는 태스크가 단지 삭제됩니다. ThreadPoolExecutor.DiscardOldestPolicy
에서는, executor 가 종료 하고 있지 않는 경우는, 워크 큐의 선두에 있는 태스크가 삭제되어 실행이 재시행됩니다 (한번 더 실패할 가능성이 있어, 그 경우는 이 처리가 반복해진다). RejectedExecutionHandler
클래스를 정의 및 사용할 수도 있습니다. 그 경우, 특정의 용량 또는 큐잉 정책에서만 동작하도록(듯이) 정책가 설계되고 있을 때는, 특히 주의가 필요합니다. beforeExecute(java.lang.Thread, java.lang.Runnable)
메소드와 afterExecute(java.lang.Runnable, java.lang.Throwable)
메소드를 제공하고 있습니다. 이러한 메소드는, 각 태스크를 실행하는 전후에 불려 갑니다. 이러한 메소드는, 실행 환경을 조작하기 위해서 사용할 수 있습니다 (ThreadLocal 의 재초기화, 통계 정보의 수집, 로그 엔트리의 추가 등). 또, executor 가 완전하게 종료하면(자) 실행할 필요가 있는 특별한 처리를 실행하도록(듯이),terminated()
메소드를 오버라이드(override) 할 수가 있습니다.
훅 또는 콜백 메소드가 예외를 throw 하면(자), 내부의 워크스 레드는 실패해 강제 종료합니다.
getQueue()
메소드를 사용하면(자), 감시나 디버그의 목적으로 워크 큐에 액세스 할 수 있습니다. 그 외의 목적으로 이 메소드를 사용하지 않는 것이 강하고 추천 되고 있습니다. 제공되는 2 개의 메소드 remove(java.lang.Runnable)
및 purge()
는, 큐에 들어가 있는 대량의 태스크가 삭제될 때, 기억 영역의 재생을 지원하기 위해서 이용할 수 있습니다. shutdown()
의 호출을 잊었을 때에도, 참조되어 있지 않은 풀이 재생되도록(듯이) 하는 경우는, 미사용의 thread가 최종적으로 종료하도록(듯이) 설정할 필요가 있습니다. 거기에는, 적절한 킵얼라이브 시간을 설정하거나 제로 코어 thread의 하한을 사용하거나allowCoreThreadTimeOut(boolean)
를 설정하거나 합니다. 확장 기능의 예. 이 클래스의 대부분의 확장 기능은, 1 개(살) 이상의 protected 훅 메소드를 오버라이드(override) 합니다. 예를 들어, 다음의 예는, 단순한 일시정지 및 재개의 기능을 추가하는 서브 클래스입니다.
class PausableThreadPoolExecutor extends ThreadPoolExecutor { private boolean isPaused; private ReentrantLock pauseLock = new ReentrantLock(); private Condition unpaused = pauseLock.newCondition(); public PausableThreadPoolExecutor(...) { super(...); } protected void beforeExecute(Thread t, Runnable r) { super.beforeExecute(t, r); pauseLock.lock(); try { while (isPaused) unpaused.await(); } catch (InterruptedException ie) { t.interrupt(); } finally { pauseLock.unlock(); } } public void pause() { pauseLock.lock(); try { isPaused = true; } finally { pauseLock.unlock(); } } public void resume() { pauseLock.lock(); try { isPaused = false; unpaused.signalAll(); } finally { pauseLock.unlock(); } } }
상자의 클래스의 개요 | |
---|---|
static class |
ThreadPoolExecutor.AbortPolicy
RejectedExecutionException 를 throw 하는 거부된 태스크의 핸들러입니다. |
static class |
ThreadPoolExecutor.CallerRunsPolicy
executor 가 종료 하고 있지 않는 경우에,execute 메소드의 호출로 거부된 태스크를 직접 실행한다, 거부된 태스크의 핸들러입니다. |
static class |
ThreadPoolExecutor.DiscardOldestPolicy
executor 가 종료 하고 있지 않는 경우에, 가장 낡은 미처리의 요구를 파기해 execute 를 재시행한다, 거부된 태스크의 핸들러입니다. |
static class |
ThreadPoolExecutor.DiscardPolicy
거부된 태스크를 통지없이 파기하는 거부된 태스크의 핸들러입니다. |
생성자 의 개요 | |
---|---|
ThreadPoolExecutor (int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue <Runnable > workQueue)
지정된 초기 파라미터, 및 디폴트의 thread 팩토리라고 거부된 실행 핸들러를 사용해, 새로운 ThreadPoolExecutor 를 작성합니다. |
|
ThreadPoolExecutor (int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue <Runnable > workQueue,
RejectedExecutionHandler handler)
지정된 초기 파라미터, 및 디폴트의 thread 팩토리를 사용해, 새로운 ThreadPoolExecutor 를 작성합니다. |
|
ThreadPoolExecutor (int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue <Runnable > workQueue,
ThreadFactory threadFactory)
지정된 초기 파라미터, 및 디폴트의 거부된 실행 핸들러를 사용해, 새로운 ThreadPoolExecutor 를 작성합니다. |
|
ThreadPoolExecutor (int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue <Runnable > workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
지정된 초기 파라미터를 사용해, 새로운 ThreadPoolExecutor 를 작성합니다. |
메소드의 개요 | |
---|---|
protected void |
afterExecute (Runnable r,
Throwable t)
지정된 Runnable 의 실행 완료시에 불려 가는 메소드입니다. |
void |
allowCoreThreadTimeOut (boolean value)
이 풀에서, 킵얼라이브 시간내에 도착한 태스크가 없으면 코어 thread가 타임 아웃 및 종료하는 것이 허가되어 새로운 태스크가 도착했을 때는 필요에 따라서 코어 thread를 옮겨놓을 수 있을지 어떨지를 제어하는 정책를 설정합니다. |
boolean |
allowsCoreThreadTimeOut ()
이 풀에서, keepAlive 시간내에 도착한 태스크가 없으면 코어 thread가 타임 아웃 및 종료하는 것이 허가되어 새로운 태스크가 도착했을 때는 필요에 따라서 코어 thread를 옮겨놓을 수 있는 경우는, true 를 돌려줍니다. |
boolean |
awaitTermination (long timeout,
TimeUnit unit)
종료 요구 후에 모든 태스크가 실행을 완료하고 있었는지, 타임 아웃이 발생하는지, 현재의 thread로 인터럽트가 발생하는지, 그 어느쪽이든가 최초로 발생할 때까지 블록 합니다. |
protected void |
beforeExecute (Thread t,
Runnable r)
지정된 thread로 지정된 Runnable 를 실행하기 전에 불려 가는 메소드입니다. |
void |
execute (Runnable command)
장래가 있는 시점에서 지정된 태스크를 실행합니다. |
protected void |
finalize ()
이 executor 가 참조되지 않게 되었을 때에 shutdown 를 호출합니다. |
int |
getActiveCount ()
액티브하게 태스크를 실행하고 있는 thread의 대략의 수를 돌려줍니다. |
long |
getCompletedTaskCount ()
지금까지 실행이 완료한 태스크의 대략의 총수를 돌려줍니다. |
int |
getCorePoolSize ()
thread의 코어수를 돌려줍니다. |
long |
getKeepAliveTime (TimeUnit unit)
코어 풀 사이즈를 넘는 thread가 종료전에 IDLE 상태에 머물 수가 있는, thread의 킵얼라이브 시간을 돌려줍니다. |
int |
getLargestPoolSize ()
풀내에 동시에 존재한 최대 thread수를 돌려줍니다. |
int |
getMaximumPoolSize ()
thread의 최대 허용수를 돌려줍니다. |
int |
getPoolSize ()
풀내의 현재의 thread수를 돌려줍니다. |
BlockingQueue <Runnable > |
getQueue ()
이 executor 로 사용하는 태스크 큐를 돌려줍니다. |
RejectedExecutionHandler |
getRejectedExecutionHandler ()
실행 가능하지 않은 태스크의 현재의 핸들러를 돌려줍니다. |
long |
getTaskCount ()
지금까지 실행이 스케줄 된 태스크의 대략의 총수를 돌려줍니다. |
ThreadFactory |
getThreadFactory ()
새로운 thread의 작성에 사용하는 thread 팩토리를 돌려줍니다. |
boolean |
isShutdown ()
이 executor 가 종료 하고 있었을 경우,true 를 돌려줍니다. |
boolean |
isTerminated ()
종료에 이어 모든 태스크가 완료하고 있었을 경우,true 를 돌려줍니다. |
boolean |
isTerminating ()
shutdown 또는 shutdownNow 의 나중에 이 executor 가 종료 처리중이지만, 완전하게 종료하고 있지 않는 경우는, true 를 돌려줍니다. |
int |
prestartAllCoreThreads ()
모든 코어 thread를 기동해, IDLE 상태로 처리 대기로 합니다. |
boolean |
prestartCoreThread ()
코어 thread를 기동해, IDLE 상태로 처리 대기로 합니다. |
void |
purge ()
삭제된 모든 Future 태스크를 워크 큐로부터 삭제하려고 합니다. |
boolean |
remove (Runnable task)
executor 의 내부 큐에 이 태스크가 존재하는 경우는 삭제하기 위해(때문에), 그 태스크가 아직 개시되어 있지 않은 경우는 실행되지 않습니다. |
void |
setCorePoolSize (int corePoolSize)
thread의 코어수를 설정합니다. |
void |
setKeepAliveTime (long time,
TimeUnit unit)
thread가 종료전에 IDLE 상태에 머물 수가 있는 제한 시간을 설정합니다. |
void |
setMaximumPoolSize (int maximumPoolSize)
thread의 최대 허용수를 설정합니다. |
void |
setRejectedExecutionHandler (RejectedExecutionHandler handler)
실행 가능하지 않은 태스크의 새로운 핸들러를 설정합니다. |
void |
setThreadFactory (ThreadFactory threadFactory)
새로운 thread의 작성에 사용하는 thread 팩토리를 설정합니다. |
void |
shutdown ()
순서 올바르게 종료을 개시합니다. |
List <Runnable > |
shutdownNow ()
실행중의 액티브한 태스크 모든 정지를 시도해 대기중의 태스크의 처리를 정지해, 실행을 대기하고 있던 태스크의 리스트를 돌려줍니다. |
protected void |
terminated ()
executor 가 종료되었을 때에 불려 가는 메소드입니다. |
클래스 java.util.concurrent. AbstractExecutorService 로부터 상속된 메소드 |
---|
invokeAll , invokeAll , invokeAny , invokeAny , newTaskFor , newTaskFor , submit , submit , submit |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait |
생성자 의 상세 |
---|
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue <Runnable > workQueue)
Executors
팩토리 메소드의 어느쪽이든을 사용하는 편이 편리한 경우가 있습니다.
corePoolSize
- 풀내 로 유지하는 thread의 수 (IDLE 상태의 thread도 포함한다)maximumPoolSize
- 풀내에서 가능한 thread의 최대수keepAliveTime
- thread의 수가 코어보다 많은 경우, 이것은 초과한 IDLE 상태의 thread가 종료전에 새로운 태스크를 대기하는 최대 시간unit
- keepAliveTime 인수의 시간 단위workQueue
- 태스크의 실행전에, 그 태스크를 보관 유지하기 위해서 사용하는 큐. 이 큐는,execute 메소드로 송신된 Runnable 태스크만을 보관 유지한다
IllegalArgumentException
- corePoolSize 또는 keepAliveTime 가 제로보다 작은 경우, maximumPoolSize 가 제로 이하의 경우, 또는 corePoolSize 가 maximumPoolSize 보다 큰 경우
NullPointerException
- workQueue 가 null 의 경우public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue <Runnable > workQueue, ThreadFactory threadFactory)
corePoolSize
- 풀내 로 유지하는 thread의 수 (IDLE 상태의 thread도 포함한다)maximumPoolSize
- 풀내에서 가능한 thread의 최대수keepAliveTime
- thread의 수가 코어보다 많은 경우, 이것은 초과한 IDLE 상태의 thread가 종료전에 새로운 태스크를 대기하는 최대 시간unit
- keepAliveTime 인수의 시간 단위workQueue
- 태스크의 실행전에, 그 태스크를 보관 유지하기 위해서 사용하는 큐. 이 큐는,execute 메소드로 송신된 Runnable 태스크만을 보관 유지하는threadFactory
- executor 가 새로운 thread를 작성할 경우에 사용하는 팩토리
IllegalArgumentException
- corePoolSize 또는 keepAliveTime 가 제로보다 작은 경우, maximumPoolSize 가 제로 이하의 경우, 또는 corePoolSize 가 maximumPoolSize 보다 큰 경우
NullPointerException
- workQueue 또는 threadFactory 가 null 의 경우public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue <Runnable > workQueue, RejectedExecutionHandler handler)
corePoolSize
- 풀내 로 유지하는 thread의 수 (IDLE 상태의 thread도 포함한다)maximumPoolSize
- 풀내에서 가능한 thread의 최대수keepAliveTime
- thread의 수가 코어보다 많은 경우, 이것은 초과한 IDLE 상태의 thread가 종료전에 새로운 태스크를 대기하는 최대 시간unit
- keepAliveTime 인수의 시간 단위workQueue
- 태스크의 실행전에, 그 태스크를 보관 유지하기 위해서 사용하는 큐. 이 큐는,execute 메소드로 송신된 Runnable 태스크만을 보관 유지하는handler
- thread의 경계에 이르러, 큐의 용량에 이르렀기 때문에, 실행이 블록 되었을 때에 사용되는 핸들러
IllegalArgumentException
- corePoolSize 또는 keepAliveTime 가 제로보다 작은 경우, maximumPoolSize 가 제로 이하의 경우, 또는 corePoolSize 가 maximumPoolSize 보다 큰 경우
NullPointerException
- workQueue 또는 handler 가 null 의 경우public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue <Runnable > workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
corePoolSize
- 아이돌이어도 풀내에 유지되는 thread의 수maximumPoolSize
- 풀내에서 가능한 thread의 최대수keepAliveTime
- thread의 수가 코어보다 많은 경우, 이것은 초과한 IDLE 상태의 thread가 새로운 태스크를 대기하고 나서 종료할 때까지의 최대 시간unit
- keepAliveTime 인수의 시간 단위workQueue
- 태스크가 초과할 때까지 보관 유지하기 위해서 사용하는 큐. 이 큐는,execute 메소드로 송신된 Runnable 태스크만을 보관 유지하는threadFactory
- executor 가 새로운 thread를 작성할 경우에 사용되는 팩토리handler
- thread의 경계 및 큐의 용량에 이르렀기 때문에, 실행이 블록 되었을 때에 사용하는 핸들러
IllegalArgumentException
- corePoolSize 또는 keepAliveTime 가 제로보다 작은 경우, maximumPoolSize 가 제로 이하의 경우, 또는 corePoolSize 가 maximumPoolSize 보다 큰 경우
NullPointerException
- workQueue,threadFactory, 또는 handler 가 null 의 경우메소드의 상세 |
---|
public void execute(Runnable command)
command
- 실행하는 태스크
RejectedExecutionException
- RejectedExecutionHandler 의 판단으로, 태스크의 실행을 받아들일 수가 없는 경우
NullPointerException
- 커멘드가 null 의 경우public void shutdown()
SecurityException
- 시큐리티 매니저가 존재하는 상황으로 이 ExecutorService 의 종료을 실행하면(자), 호출 측에는 변경을 허가하지 않는 thread를 조작할 수 있는 경우. 이것은,RuntimePermission
("modifyThread") 를 보관 유지하지 않는지, 시큐리티 매니저의 checkAccess 메소드가 액세스를 거부하기 위해(때문에)이다public List <Runnable > shutdownNow()
실행중의 액티브한 태스크 처리를 정지하기 위해서 최선의 노력을 하는 것 이상의 보증은 없습니다. 이 구현에서는,Thread.interrupt()
를 개입시켜 태스크를 취소하기 (위해)때문에, 인터럽트에 대한 응답에 실패한 태스크는 종료하지 않게 될 가능성이 있습니다.
SecurityException
- 시큐리티 매니저가 존재하는 상황으로 이 ExecutorService 의 종료을 실행하면(자), 호출 측에는 변경을 허가하지 않는 thread를 조작할 수 있는 경우. 이것은,RuntimePermission
("modifyThread") 를 보관 유지하지 않는지, 시큐리티 매니저의 checkAccess 메소드가 액세스를 거부하기 위해(때문에)이다public boolean isShutdown()
ExecutorService
의 기술:
public boolean isTerminating()
public boolean isTerminated()
ExecutorService
의 기술:
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
ExecutorService
의 기술:
timeout
- 대기하는 최장 시간unit
- timeout 인수의 시간 단위
InterruptedException
- 대기중에 인터럽트가 발생했을 경우protected void finalize()
Object
내의 finalize
public void setThreadFactory(ThreadFactory threadFactory)
threadFactory
- 새로운 thread 팩토리
NullPointerException
- threadFactory 가 null 의 경우getThreadFactory()
public ThreadFactory getThreadFactory()
setThreadFactory(java.util.concurrent.ThreadFactory)
public void setRejectedExecutionHandler(RejectedExecutionHandler handler)
handler
- 새로운 핸들러
NullPointerException
- 핸들러가 null 의 경우getRejectedExecutionHandler()
public RejectedExecutionHandler getRejectedExecutionHandler()
setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler)
public void setCorePoolSize(int corePoolSize)
corePoolSize
- 새로운 코어 사이즈
IllegalArgumentException
- corePoolSize 가 제로보다 작은 경우getCorePoolSize()
public int getCorePoolSize()
setCorePoolSize(int)
public boolean prestartCoreThread()
public int prestartAllCoreThreads()
public boolean allowsCoreThreadTimeOut()
public void allowCoreThreadTimeOut(boolean value)
value
- 타임 아웃 하는 경우는 true, 그렇지 않은 경우는 false
IllegalArgumentException
- 치가 true 로, 현재의 킵얼라이브 시간이 제로 이하의 경우public void setMaximumPoolSize(int maximumPoolSize)
maximumPoolSize
- 새로운 최대치
IllegalArgumentException
- 새로운 최대치가 제로 이하의 경우, 또는 core pool size 보다 작은 경우getMaximumPoolSize()
public int getMaximumPoolSize()
setMaximumPoolSize(int)
public void setKeepAliveTime(long time, TimeUnit unit)
time
- 대기하는 시간. time 치가 제로의 경우는, 태스크를 실행하자마자 초과한 thread가 종료하는unit
- time 인수의 시간 단위
IllegalArgumentException
- time 가 제로보다 작은 경우, 또는 time 가 제로로 allowsCoreThreadTimeOut 의 경우getKeepAliveTime(java.util.concurrent.TimeUnit)
public long getKeepAliveTime(TimeUnit unit)
unit
- 반환값으로 지정하는 시간 단위
setKeepAliveTime(long, java.util.concurrent.TimeUnit)
public BlockingQueue <Runnable > getQueue()
public boolean remove(Runnable task)
이 메소드는 취소해 방식의 일부로서 편리한 일이 있습니다. 내부 큐에 배치되기 전에 다른 형식에 변환된 태스크는, 삭제에 실패할 가능성이 있습니다. 예를 들어,submit 를 사용해 들어가는 태스크는,Future 상태를 유지하는 형식에 변환되는 일이 있습니다. 다만, 이 경우는,purge()
메소드를 사용해, 삭제된 Future 를 삭제할 수가 있습니다.
task
- 삭제하는 태스크
public void purge()
Future
태스크를 워크 큐로부터 삭제하려고 합니다. 이 메소드는, 기능에 그 외의 영향이 없는, 기억 영역의 재생 오퍼레이션으로서 편리한 일이 있습니다. 삭제된 태스크가 실행될 것은 없습니다만, 워크스 레드가 액티브하게 삭제할 때까지 워크 큐내에 축적되는 경우가 있습니다. 이 메소드를 호출하면(자), 즉시 삭제하려고 합니다. 다만, 그 외의 thread에 의한 간섭이 존재하는 경우는, 이 메소드는 태스크의 삭제에 실패하는 일이 있습니다.
public int getPoolSize()
public int getActiveCount()
public int getLargestPoolSize()
public long getTaskCount()
public long getCompletedTaskCount()
protected void beforeExecute(Thread t, Runnable r)
이 구현은 처리를 실시하지 않습니다만, 서브 클래스에서 커스터마이즈 하는 것은 가능합니다. 주:복수의 오버라이드(override)를 적절히 상자로 하기 (위해)때문에, 일반적으로은, 서브 클래스에서는 이 메소드의 최후로 super.beforeExecute 를 호출하도록 해 주세요.
t
- 태스크 r 를 실행하는 threadr
- 실행되는 태스크protected void afterExecute(Runnable r, Throwable t)
주: 액션이 명시적으로, 또는 submit 등의 메소드에 의해, 태스크 (FutureTask
등) 내에 들어가는 경우, 이러한 태스크 객체는 계산의 예외를 캐치 해 유지합니다. 그 때문에, 이상종료(ABEND) 할 것은 없고, 내부 예외는 이 메소드에게 건네지지 않습니다.
이 구현은 처리를 실시하지 않습니다만, 서브 클래스에서 커스터마이즈 하는 것은 가능합니다. 주:복수의 오버라이드(override)를 적절히 상자로 하기 (위해)때문에, 일반적으로, 서브 클래스에서는 이 메소드의 최초로 super.afterExecute 를 호출하도록 해 주세요.
r
- 완료한 Runnablet
- 종료의 원인이 된 예외, 또는 실행이 정상적으로 완료했을 경우는 nullprotected void terminated()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요 : 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.