Учебники

Класс ThreadPoolExecutor

java.util.concurrent.ThreadPoolExecutor — это ExecutorService для выполнения каждой переданной задачи с использованием одного из, возможно, нескольких объединенных потоков, обычно настраиваемых с использованием фабричных методов Executors. Он также предоставляет различные служебные методы для проверки статистики текущих потоков и управления ими.

Методы ThreadPoolExecutor

Sr.No. Метод и описание
1

защищенная пустота afterExecute (Runnable r, Throwable t)

Метод вызывается после завершения выполнения данного Runnable.

2

void allowCoreThreadTimeOut (логическое значение)

Устанавливает политику, определяющую, могут ли основные потоки блокировать время ожидания и завершаться, если в течение времени поддержки не поступают никакие задачи, и при необходимости заменяются при поступлении новых задач.

3

boolean allowCoreThreadTimeOut ()

Возвращает значение true, если этот пул позволяет основным потокам выполнять тайм-аут и завершать работу, если в течение времени keepAlive задачи не поступают, и при необходимости заменяться при поступлении новых задач.

4

логическое awaitTermination (длительное время ожидания, единица времени)

Блокируется до тех пор, пока все задачи не завершат выполнение после запроса на выключение, или не истечет время ожидания, или текущий поток не будет прерван, в зависимости от того, что произойдет раньше.

5

защищенный void beforeExecute (поток t, Runnable r)

Метод вызывается до выполнения данного Runnable в указанном потоке.

6

void execute (команда Runnable)

Выполняет задание когда-нибудь в будущем.

7

финал защищенный void ()

Вызывает завершение работы, когда на этого исполнителя больше нет ссылок, и у него нет потоков.

8

int getActiveCount ()

Возвращает приблизительное количество потоков, которые активно выполняют задачи.

9

long getCompletedTaskCount ()

Возвращает приблизительное общее количество задач, которые завершили выполнение.

10

int getCorePoolSize ()

Возвращает количество ядер.

11

long getKeepAliveTime (единица времени)

Возвращает время поддержания потока, то есть время, в течение которого потоки, превышающие размер основного пула, могут оставаться бездействующими до завершения.

12

int getLargestPoolSize ()

Возвращает наибольшее количество потоков, которые когда-либо были одновременно в пуле.

13

int getMaximumPoolSize ()

Возвращает максимально допустимое количество потоков.

14

int getPoolSize ()

Возвращает текущее количество потоков в пуле.

15

BlockingQueue getQueue ()

Возвращает очередь задач, использованную этим исполнителем.

15

RejectedExecutionHandler getRejectedExecutionHandler ()

Возвращает текущий обработчик для неисполнимых задач.

16

long getTaskCount ()

Возвращает приблизительное общее количество задач, которые когда-либо были запланированы для выполнения.

17

ThreadFactory getThreadFactory ()

Возвращает фабрику потоков, использованную для создания новых потоков.

18

логическое isShutdown ()

Возвращает true, если этот исполнитель был закрыт.

19

логическое значение isTermination ()

Возвращает true, если все задачи были выполнены после завершения работы.

20

логическое isTerminating ()

Возвращает true, если этот исполнитель находится в процессе завершения после shutdown () или shutdownNow (), но не завершился полностью.

21

int prestartAllCoreThreads ()

Запускает все основные потоки, заставляя их бездействовать в ожидании работы.

22

логический prestartCoreThread ()

Запускает основной поток, заставляя его бездействовать в ожидании работы.

23

очистка от пустот ()

Пытается удалить из рабочей очереди все будущие задачи, которые были отменены.

24

логическое удаление (Runnable задача)

Удаляет эту задачу из внутренней очереди исполнителя, если она присутствует, в результате чего она не запускается, если она еще не запущена.

25

void setCorePoolSize (int corePoolSize)

Устанавливает количество ядер.

26

void setKeepAliveTime (долгое время, единица времени)

Устанавливает время, в течение которого потоки могут оставаться бездействующими до завершения

27

void setMaximumPoolSize (int MaximumPoolSize)

Устанавливает максимально допустимое количество потоков.

28

void setRejectedExecutionHandler (обработчик RejectedExecutionHandler)

Устанавливает новый обработчик для неисполнимых задач.

29

void setThreadFactory (ThreadFactory threadFactory)

Устанавливает фабрику потоков, используемую для создания новых потоков.

30

отключение пустоты ()

Инициирует упорядоченное завершение, при котором выполняются ранее отправленные задачи, но новые задачи не принимаются.

31

List <Runnable> shutdownNow ()

Пытается остановить все активно выполняющиеся задачи, останавливает обработку ожидающих задач и возвращает список задач, ожидающих выполнения.

32

защищенная пустота прекращена ()

Метод вызывается после завершения Исполнителя.

33

Строка toString ()

Возвращает строку, идентифицирующую этот пул, а также его состояние, включая индикаторы состояния выполнения и приблизительное число рабочих и задач.

защищенная пустота afterExecute (Runnable r, Throwable t)

Метод вызывается после завершения выполнения данного Runnable.

void allowCoreThreadTimeOut (логическое значение)

Устанавливает политику, определяющую, могут ли основные потоки блокировать время ожидания и завершаться, если в течение времени поддержки не поступают никакие задачи, и при необходимости заменяются при поступлении новых задач.

boolean allowCoreThreadTimeOut ()

Возвращает значение true, если этот пул позволяет основным потокам выполнять тайм-аут и завершать работу, если в течение времени keepAlive задачи не поступают, и при необходимости заменяться при поступлении новых задач.

логическое awaitTermination (длительное время ожидания, единица времени)

Блокируется до тех пор, пока все задачи не завершат выполнение после запроса на выключение, или не истечет время ожидания, или текущий поток не будет прерван, в зависимости от того, что произойдет раньше.

защищенный void beforeExecute (поток t, Runnable r)

Метод вызывается до выполнения данного Runnable в указанном потоке.

void execute (команда Runnable)

Выполняет задание когда-нибудь в будущем.

финал защищенный void ()

Вызывает завершение работы, когда на этого исполнителя больше нет ссылок, и у него нет потоков.

int getActiveCount ()

Возвращает приблизительное количество потоков, которые активно выполняют задачи.

long getCompletedTaskCount ()

Возвращает приблизительное общее количество задач, которые завершили выполнение.

int getCorePoolSize ()

Возвращает количество ядер.

long getKeepAliveTime (единица времени)

Возвращает время поддержания потока, то есть время, в течение которого потоки, превышающие размер основного пула, могут оставаться бездействующими до завершения.

int getLargestPoolSize ()

Возвращает наибольшее количество потоков, которые когда-либо были одновременно в пуле.

int getMaximumPoolSize ()

Возвращает максимально допустимое количество потоков.

int getPoolSize ()

Возвращает текущее количество потоков в пуле.

BlockingQueue getQueue ()

Возвращает очередь задач, использованную этим исполнителем.

RejectedExecutionHandler getRejectedExecutionHandler ()

Возвращает текущий обработчик для неисполнимых задач.

long getTaskCount ()

Возвращает приблизительное общее количество задач, которые когда-либо были запланированы для выполнения.

ThreadFactory getThreadFactory ()

Возвращает фабрику потоков, использованную для создания новых потоков.

логическое isShutdown ()

Возвращает true, если этот исполнитель был закрыт.

логическое значение isTermination ()

Возвращает true, если все задачи были выполнены после завершения работы.

логическое isTerminating ()

Возвращает true, если этот исполнитель находится в процессе завершения после shutdown () или shutdownNow (), но не завершился полностью.

int prestartAllCoreThreads ()

Запускает все основные потоки, заставляя их бездействовать в ожидании работы.

логический prestartCoreThread ()

Запускает основной поток, заставляя его бездействовать в ожидании работы.

очистка от пустот ()

Пытается удалить из рабочей очереди все будущие задачи, которые были отменены.

логическое удаление (Runnable задача)

Удаляет эту задачу из внутренней очереди исполнителя, если она присутствует, в результате чего она не запускается, если она еще не запущена.

void setCorePoolSize (int corePoolSize)

Устанавливает количество ядер.

void setKeepAliveTime (долгое время, единица времени)

Устанавливает время, в течение которого потоки могут оставаться бездействующими до завершения

void setMaximumPoolSize (int MaximumPoolSize)

Устанавливает максимально допустимое количество потоков.

void setRejectedExecutionHandler (обработчик RejectedExecutionHandler)

Устанавливает новый обработчик для неисполнимых задач.

void setThreadFactory (ThreadFactory threadFactory)

Устанавливает фабрику потоков, используемую для создания новых потоков.

отключение пустоты ()

Инициирует упорядоченное завершение, при котором выполняются ранее отправленные задачи, но новые задачи не принимаются.

List <Runnable> shutdownNow ()

Пытается остановить все активно выполняющиеся задачи, останавливает обработку ожидающих задач и возвращает список задач, ожидающих выполнения.

защищенная пустота прекращена ()

Метод вызывается после завершения Исполнителя.

Строка toString ()

Возвращает строку, идентифицирующую этот пул, а также его состояние, включая индикаторы состояния выполнения и приблизительное число рабочих и задач.

пример

Следующая программа TestThread показывает использование интерфейса ThreadPoolExecutor в среде на основе потоков.

Live Demo

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();
         }
      }
   }
}

Это даст следующий результат.