ThreadPoolExecutor 클래스

java.util.concurrent.ThreadPoolExecutor는 일반적으로 Executors 팩토리 메소드를 사용하여 구성된 여러 풀링 된 스레드 중 하나를 사용하여 제출 된 각 작업을 실행하는 ExecutorService입니다. 또한 현재 스레드 통계를 확인하고 제어 할 수있는 다양한 유틸리티 메서드를 제공합니다.

ThreadPoolExecutor 메서드

Sr. 아니. 방법 및 설명
1

protected void afterExecute(Runnable r, Throwable t)

지정된 Runnable 실행 완료시 호출되는 메서드입니다.

2

void allowCoreThreadTimeOut(boolean value)

연결 유지 시간 내에 작업이 도착하지 않으면 코어 스레드가 시간 초과되고 종료 될 수 있는지 여부를 제어하는 ​​정책을 설정하고, 새 작업이 도착하면 필요한 경우 교체됩니다.

boolean allowsCoreThreadTimeOut()

이 풀이 keepAlive 시간 내에 작업이 도착하지 않으면 코어 스레드가 시간 초과되고 종료되도록 허용하는 경우 true를 반환하고, 새 작업이 도착할 때 필요한 경우 교체됩니다.

4

boolean awaitTermination(long timeout, TimeUnit unit)

종료 요청 후 모든 작업이 실행을 완료하거나 시간 초과가 발생하거나 현재 스레드가 중단 될 때까지 차단합니다.

5

protected void beforeExecute(Thread t, Runnable r)

지정된 스레드에서 지정된 Runnable을 실행하기 전에 호출 된 메서드입니다.

6

void execute(Runnable command)

미래에 주어진 작업을 실행합니다.

7

protected void finalize()

이 실행 프로그램이 더 이상 참조되지 않고 스레드가없는 경우 종료를 호출합니다.

8

int getActiveCount()

작업을 적극적으로 실행중인 대략적인 스레드 수를 반환합니다.

9

long getCompletedTaskCount()

실행을 완료 한 대략적인 총 작업 수를 반환합니다.

10

int getCorePoolSize()

코어 스레드 수를 반환합니다.

11

long getKeepAliveTime(TimeUnit unit)

코어 풀 크기를 초과하는 스레드가 종료되기 전에 유휴 상태로 유지 될 수있는 시간 인 스레드 연결 유지 시간을 반환합니다.

12

int getLargestPoolSize()

풀에 동시에 있었던 최대 스레드 수를 반환합니다.

13

int getMaximumPoolSize()

허용되는 최대 스레드 수를 반환합니다.

14

int getPoolSize()

풀의 현재 스레드 수를 반환합니다.

15

BlockingQueue getQueue()

이 실행자가 사용하는 태스크 큐를 리턴합니다.

15

RejectedExecutionHandler getRejectedExecutionHandler()

실행 불가능한 작업에 대한 현재 처리기를 반환합니다.

16

long getTaskCount()

실행이 예약 된 대략적인 총 작업 수를 반환합니다.

17

ThreadFactory getThreadFactory()

새 스레드를 만드는 데 사용되는 스레드 팩토리를 반환합니다.

18

boolean isShutdown()

이 실행 프로그램이 종료 된 경우 true를 반환합니다.

19

boolean isTerminated()

종료 후 모든 작업이 완료되면 true를 반환합니다.

20

boolean isTerminating()

이 실행 프로그램이 shutdown () 또는 shutdownNow () 후 종료하는 중이지만 완전히 종료되지 않은 경우 true를 반환합니다.

21

int prestartAllCoreThreads()

모든 코어 스레드를 시작하여 작업을 대기하도록합니다.

22

boolean prestartCoreThread()

코어 스레드를 시작하여 작업을 대기하도록합니다.

23

void purge()

취소 된 모든 Future 작업을 작업 대기열에서 제거하려고합니다.

24

boolean remove(Runnable task)

이 태스크가있는 경우 실행기의 내부 큐에서 제거하여 아직 시작되지 않은 경우 실행되지 않도록합니다.

25

void setCorePoolSize(int corePoolSize)

코어 스레드 수를 설정합니다.

26

void setKeepAliveTime(long time, TimeUnit unit)

스레드가 종료되기 전에 유휴 상태로 유지 될 수있는 시간 제한을 설정합니다.

27

void setMaximumPoolSize(int maximumPoolSize)

허용되는 최대 스레드 수를 설정합니다.

28

void setRejectedExecutionHandler(RejectedExecutionHandler handler)

실행 불가능한 작업에 대한 새 핸들러를 설정합니다.

29

void setThreadFactory(ThreadFactory threadFactory)

새 스레드를 만드는 데 사용되는 스레드 팩토리를 설정합니다.

30

void shutdown()

이전에 제출 한 작업이 실행되지만 새 작업은 수락되지 않는 순서대로 종료를 시작합니다.

31

List<Runnable> shutdownNow()

현재 실행중인 모든 작업을 중지하려고 시도하고 대기중인 작업의 처리를 중지하며 실행을 기다리고 있던 작업 목록을 반환합니다.

32

protected void terminated()

Executor가 종료되었을 때 호출되는 메소드입니다.

33

String toString()

실행 상태, 예상 작업자 및 작업 수의 표시를 포함하여이 풀과 상태를 식별하는 문자열을 반환합니다.

다음 TestThread 프로그램은 스레드 기반 환경에서 ThreadPoolExecutor 인터페이스의 사용법을 보여줍니다.

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TestThread {
	
   public static void main(final String[] arguments) throws InterruptedException {
      ThreadPoolExecutor executor = (ThreadPoolExecutor)Executors.newCachedThreadPool();

      //Stats before tasks execution
      System.out.println("Largest executions: "
         + executor.getLargestPoolSize());
      System.out.println("Maximum allowed threads: "
         + executor.getMaximumPoolSize());
      System.out.println("Current threads in pool: "
         + executor.getPoolSize());
      System.out.println("Currently executing threads: "
         + executor.getActiveCount());
      System.out.println("Total number of threads(ever scheduled): "
         + executor.getTaskCount());

      executor.submit(new Task());
      executor.submit(new Task());

      //Stats after tasks execution
      System.out.println("Core threads: " + executor.getCorePoolSize());
      System.out.println("Largest executions: "
         + executor.getLargestPoolSize());
      System.out.println("Maximum allowed threads: "
         + executor.getMaximumPoolSize());
      System.out.println("Current threads in pool: "
         + executor.getPoolSize());
      System.out.println("Currently executing threads: "
         + executor.getActiveCount());
      System.out.println("Total number of threads(ever scheduled): "
         + executor.getTaskCount());

      executor.shutdown();
   }  

   static class Task implements Runnable {

      public void run() {

         try {
            Long duration = (long) (Math.random() * 5);
            System.out.println("Running Task! Thread Name: " +
               Thread.currentThread().getName());
            TimeUnit.SECONDS.sleep(duration);
            System.out.println("Task Completed! Thread Name: " +
               Thread.currentThread().getName());
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
   }
}

그러면 다음과 같은 결과가 생성됩니다.

산출

Largest executions: 0
Maximum allowed threads: 2147483647
Current threads in pool: 0
Currently executing threads: 0
Total number of threads(ever scheduled): 0
Core threads: 0
Largest executions: 2
Maximum allowed threads: 2147483647
Current threads in pool: 2
Currently executing threads: 2
Total number of threads(ever scheduled): 2
Running Task! Thread Name: pool-1-thread-2
Running Task! Thread Name: pool-1-thread-1
Task Completed! Thread Name: pool-1-thread-1
Task Completed! Thread Name: pool-1-thread-2