Java Thread Bool Executorservice
1. БИЛЕР НИЗКИ
1.1 При каких обстоятельствах вы используете пул потоков?
1.2 Преимущества использования пулов потоков
2. Executorservice и исполнители
2.1 Введение
Executorservice - это интерфейс, который наследует исполнителя,
Public Interface executorservice Extend Executor {}Исполнитель также является интерфейсом, который содержит только один метод:
Исполнитель Public Interface {void execute (runnable command);} Интерфейс верхнего уровня пула потоков в Java-это эксперт, но строго говоря, >> Exector-это не пул потоков, а просто инструмент для выполнения потоков. Настоящий поток> интерфейс пула является исполнительницей.
3. Исполнители
Это статический заводский класс, который может создавать различные типы пулов потоков, и некоторые из исходных кодов следующие:
Исполнители открытого класса {// newFixedThreadPoolPublic Static ExecutorService newFixedThreadpool (int nthreads) {return new ThreadPoolexeCutor (nthreads, nthreads, 0l, TimeUnit.milliseconds, new LinkedBrockeue <runnable> ();} // newcachethr newcachedthreadpool () {return new ThreadPoolexeCutor (0, integer.max_value, 60L, TimeUnit.seconds, new SynchronousQueue <Runnable> ()); } // newscheduledThreadpool public static seduledExecutorservice newschedledThreadpool (int corepoolsize) {return new charedledThreadPoolexeCutor (corePoolSize); } // newstringooo}Давайте сначала рассмотрим конкретный пример и используем примеры, чтобы проиллюстрировать сходства и различия между ними.
Поток пакета; import java.util.concurrent.executorservice; import java.util.concurrent.executors; import java.util.concurrent.scheduledexeCutorService;/*** Создан Янгом 16-7-11. */public class ch09_executor {private static void run (rececusterservice threadpool) {for (int i = 1; i <5; i ++) {final int taskid = i; threadpool.execute (new Runnable () {@override public void run () {for (int i = 1; i <5; i ++) {try {thread.sleep (20);} catch (прерывание Exception e) {e.printstacktrace ();} system.out.println ("+askid+" execution ");};);};);};);};););};);};};);};);};);};););};);};);};););};);};););};);};);};);};);); ThreadPool.ShutDown (); Пул одного потока. run (fixedthreadpool); // (2) // run (SingleThreadPool); // (3) // запустить (graphledThreadpool); // (4)}}4. 4 Обычно используемые резьбовые бассейны
4.1 CachedThreadpool
CachedThreadpool создаст область кэша, которая кэширует инициализированную поток, завершает и удаляет потоки, которые не использовались в течение 6 секунд из кэша.
Если поток доступен, используйте поток, который был создан ранее. Если поток недоступен, создайте новый поток.
.Reuse:
Пул типа кеша, сначала проверьте, есть ли потоки, которые были созданы в бассейне. Если есть, повторно используйте. Если никого нет, создайте новый поток и добавьте его в бассейн.
Используйте сценарии:
Кэш-бассейны обычно используются для выполнения некоторых асинхронных задач с коротким сроком службы, поэтому они мало используются на некоторых серверах типа демона.
Время вне:
Поток, который может быть повторно использовать, должна быть потоком в бассейне в рамках тайм -аута. Тайм -аут по умолчанию - 60 -е годы. Если продолжительность этого холостого хода будет превышена, экземпляр потока будет прекращен, а бассейн будет удален.
Заканчивать:
Поток, помещенный в CachedThreadpool, не нужно беспокоиться о его конце. Если он неактивен после тайм -аута, он будет автоматически прекращен.
Пример объяснения:
Удалите комментарии (2) и запустите их. Результат операции заключается в следующем:
The first time of the first task, the third time of the third task, the third time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the third time of the third time of the second time of the second time of the second time of the third time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the fourth time of the fourth time of the fourth time of the first task, the fourth time of the fourth time of the first task, the fourth time of the fourth time of the first task, the fourth time of the fourth time of the first task, the fourth time of the fourth time of the first task, the fourth time of the fourth time of the fourth time of the first task, the fourth time of the fourth time of the fourth time of the first task, the fourth time of the fourth time of the fourth time of the first task, the fourth time of the fourth time of the fourth time of the first task, the Четвертый раз в четвертый раз четвертого времени первого задания, четвертый раз четвертого времени первого задания, четвертый раз четвертого времени четвертого времени первой задачи, четвертый раз четвертого времени четвертого времени первого задания, четвертый раз
Из результатов видно, что 4 задачи выполняются попеременно.
4.2fixedthreadpool
В фиксированном sthreadpool есть бассейн с фиксированным размером,
Если в настоящее время необходимо выполнять задачи, превышающие размер бассейна, то многие исходящие задачи выполняются в состоянии ожидания, пока не появятся бесплатные потоки для выполнения задач.
Если задача, которая в настоящее время должна быть выполнена, меньше размера бассейна, поток холостого хода не будет уничтожена.
Повторное использование:
Fixedthreadpool похож на Cachethreadpool, и его также можно использовать, если его можно использовать, но вы не можете создавать новые потоки в любое время.
Фиксированный номер
Его уникальность заключается в том, что в любой момент времени может быть только фиксированное количество активных потоков. В настоящее время, если есть новый поток, который будет установлен, его можно поместить только в другую очередь и подождать, пока поток в текущем потоке не завершится и не будет выдвинут из бассейна напрямую.
Время вне:
В отличие от Cachethreadpool, Fixerthreadpool не имеет механизма холостого хода.
Используйте сценарии:
Следовательно, большая часть фиксированной sthreadpool предназначена для некоторых очень стабильных и фиксированных регулярных одновременных потоков и в основном используется на серверах
Анализ исходного кода:
Судя по исходному коду метода, пул кэша и фиксированный пул называют один и тот же базовый пул, но параметры разные.
Исправленное количество потоков пула зафиксировано и на 0 секунд простоя (без холостого хода)
Количество потоков пула кэша поддерживает 0-integer.max_value (очевидно, толерантность к ресурсам хоста вообще не рассматривается), 60 секунд.
Пример объяснения:
Удалите комментарии (1), и результат выполнения следующего:
The first time of the first task, the third time of the third time of the first task, the third time of the second time of the second task, the third time of the second time of the second time of the second task, the third time of the third time of the second time of the second task, the third time of the third time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the Четвертый раз в четвертый раз четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени в четвертый раз четвертый раз четвертый of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the Четвертый раз в четвертый раз четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени четвертого времени в четвертый раз четвертый раз четвертый в четвертый раз
Пул потоков фиксированного размера был создан с емкостью 3, а затем 4 задачи были выполнены в цикле. Из результатов выходных данных можно увидеть, что первые 3 задачи были выполнены сначала, а затем потоки холостого хода выполнили четвертую задачу.
4.3SingleThreadExeCutor
Удалить (3) комментарии. Смотрите результат выполнения следующим образом:
The first task of the first task of the first task of the second task of the first task of the third task of the first task of the fourth task of the second task of the second task of the second task of the second task of the second task of the second task of the second task of the third task of the third task of the third task of the third task of the third task of the third task of the third task of the third task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task
Четыре задачи выполняются последовательно.
4.4 PradulledThreadpool
PradulledThreadpool-это пул потоков фиксированного размера. Подобно FixedThreadpool, выполненные задачи представляют собой задачи.
Результат, полученный путем удаления аннотации (4), такой же, как и результат, полученный с помощью FixedThreadPool. Основной причиной для PradeDThreadPool здесь не является, а задача. См. Следующий пример:
Поток пакета; import java.util.concurrent.executors; import java.util.concurrent.scheduledexecutorservice; import java.util.concurrent.timeUnit;/*** Создан Янгом 16-7-11. */public class myscheduledtask реализует runnable {private String tname; public myscheduledtask (string name) {this.tname = name; } public void run () {system.out.println (tname+"Задержка задачи 2 секунды!"); } public static void main (string [] args) {warededExecutorservice preduledpool = experators.newschedudThreadpool (2); Graduledexecutorservice singschedulepool = experators.newsinglethreadscheduledexecutor (); Myscheduledtask mt1 = new myscheduledtask ("mt1"); Myscheduledtask mt2 = new myscheduledtask ("mt2"); // запустить задание MT1 с PraduledThreadpool для выполнения charedudpool.schedule (mt1,2, timeUnit.seconds); // запустить MT2 с SinglescheduledThreadpool; singschedulepool.schedule (MT2,2000, TimeUnit.milliseconds); warduledpool.shutdown (); singschedulepool.shutdown (); }}результат:
Задержка задачи MT1 задерживается 2 секунды для выполнения! Задержка задачи MT2 задерживается 2 секунды для выполнения!
Результат не будет отображаться после запуска программы в течение 2 секунд, что указывает на то, что поток был выполнен через 2 секунды.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!