1. Исполнители
Класс исполнителей можно рассматривать как «класс инструментов». Ссылаясь на введение в API JDK1.6:
Заводские и практические методы исполнителя, исполнителя, PredulleDexeCutorService, TreadFactory и Callyable, определенных в этом пакете. Этот класс поддерживает различные методы:
(1) Создать и вернуть метод установки ExecutorService с помощью обычно используемых строк конфигурации.
(2) Создайте и возвращайте метод установки PreduledExecutorservice с часто используемыми строками конфигурации.
(3) Создайте и возвращайте метод «Обернутого» исполнителя, который отключает реконфигурацию, делая конкретные методы реализации недоступными.
(4) Создать и вернуть метод Threadfactory, который может установить недавно созданный поток в известное состояние.
(5) Создайте и возвращайте не сжиженный вызовный метод, чтобы его можно было использовать в методах выполнения, которые требуют вызова.
Благодаря этому классу вы можете получить несколько экземпляров пулов потоков, таких как вызов NewsingLethreadExeCutor (), чтобы получить однопоточный исполнитель, вызывая NewFixedThreadPool (), чтобы получить Executorservice из пула потоков с фиксированным размером и т. Д. Самое простое - использовать его для выполнения выполняемых объектов, или вы можете выполнить некоторые объекты, которые реализуют Callable <t>. Не существует возвращаемого значения с использованием метода start () Thread (). Если метод, выполненный потоком, имеет возвратное значение, было бы лучше использовать Executorservice. Вы можете выбрать отправить (), invokeall () или invokeany () и выбрать соответствующий метод в соответствии с конкретной ситуацией.
Некоторые из методов, представленных в этом классе:
1.1 Public Static ExecutorService NewCachedThreadPool ()
Создайте пул потоков, который создает новые потоки по мере необходимости, но будет повторно использовать их, когда будут доступны ранее построенные потоки. Эти пулы потоков обычно улучшают производительность программ для программ, которые выполняют много краткосрочных асинхронных задач.
1.2 Public Static ExecutorService NewFixedThreadpool (int nthreads)
Создайте пул потоков с фиксированным количеством многоразовых потоков, чтобы запустить эти потоки в общей неограниченной очереди.
1.3 Public Static ExecutorService NewsingleThreadExeCutor ()
Создайте исполнителя, который использует один рабочий поток для запуска потока в неограниченной очереди.
Все три метода могут быть использованы с экземплярами интерфейса Threadfactory. И вернуть экземпляр интерфейса experservice.
2. Интерфейс Threadfactory
Создайте новые объекты потока по мере необходимости. Использование заводов потоков больше не требует ручного написания новых вызовов потоков, что позволяет приложениям использовать специальные подклассы потока, свойства и т. Д.
Самая простая реализация этого интерфейса:
класс SimpleThreadReadFactory реализует ThreadFactory {public Thread NewThread (Runnable R) {return New Thread (r); }} 3. Интерфейс Executorservice
Этот интерфейс предоставляет метод управления прекращением.
4. Создайте стандартную резьбу запуска пула потоков
4.1 Предоставьте простой поток, который реализует запускаемый интерфейс
Mythread.java
пакет com.zj.concurrency.executors; открытый класс Mythread реализует runnable {private int count = 1, номер; public mythread (int num) {number = num; System.out.println ("Создать Thread-" + number); } public void run () {while (true) {System.out.println ("Thread-" + number + "run" + count + "time (s)"); if (++ count == 3) return; }}} Этот поток распечатает соответствующую информацию о создании и выполнении.
4.2 Start Thread с помощью CachedThreadpool
CachedThreadpool.java
пакет com.zj.concurrency.executors; import java.util.concurrent.executorservice; import java.util.concurrent.executors; открытый класс CachedThreadpool {public static void main (string [] args) {executorerservice exc = executors.newcachedThreadPool (); для (int i = 0; i <5; i ++) exec.execute (new mythread (i)); exec.shutdown (); }} результат:
Создать Thread-0create Thread-1 Create Thread-2-Create Thread-3thread-0 Запуск 1 Время (S) Thread-0. Запуск 2 Время (S) Thread-1 Запуск 1 Время (S) Thread-1 Запуск 2 Время (S) Thread-2 Запустите 1 Время 2 Запуск 2 Запуск 2 Время (S) Создание Thread-4thRead-4 Запуск 1 Время (S) Thread-STURN (S).
4.3 Запуск потока с помощью FixedThreadpool
Fixedthreadpool.javapackage com.zj.concurrency.executors; import java.util.concurrent.executorservice; import java.util.concurrent.executors; открытый класс fixedthreadpool {public static void main (string [] args) {receectorservice exec = executors.newfixedthreadpool (2); для (int i = 0; i <5; i ++) exec.execute (new mythread (i)); exec.shutdown (); }} результат:
Создание потока Thread-0Create Thread-1 Create Thread-2-Create Thread-3create Thread-4thread-0 Запуск 1 Время (S) Thread-0. Запуск 2 Время (S) Thread-2 Запуск 1 Время (S) Thread-2 Запуск 2 Время (S) Thread-3. Запуск 1 Время (S) Thread-3.
4.4 Запуск потока с помощью SingleThreadExeCutor
SingleThreadExeCutor.java
пакет com.zj.concurrency.executors; import java.util.concurrent.executorservice; import java.util.concurrent.executors; открытый класс SingleThreadExeCutor {public static void main (string [] args) {rececusterService exec = executors.newsingleThreadExeCutor (); для (int i = 0; i <5; i ++) exec.execute (new mythread (i)); exec.shutdown (); }} результат:
Создание потока Thread-0create Thread-1 Create Thread-2-Create Thread-3create Thread-4thread-0 Запуск 1 Время (S) Thread-0 Запуск 2 Время (S) Thread-1 Запуск 1 Время (S) Thread-1 Запуск 2 Время (S) Thread-2 Запустите 1 Время (S) Thread-2 Запуск 2 Время (S) Thread-3 Запуск 1 Время (S) Thread-3 Запустить 2 Время (S).
5. сотрудничать с использованием интерфейса Threadfactory Interface
Мы пытаемся добавить настройки атрибута Daemon и Priority в поток.
5.1 Установите свойства фонового потока
Daemonthreadfactory.java
пакет com.zj.concurrency.executors.factory; import java.util.concurrent.threadfactory; открытый класс daemonthreadfactory реализует ThreadFactory {public Thread NewThread (Runnable R) {Thread T = New Thread (R); T.SetDaemon (True); возврат t; }}
5.2 Установите атрибуты приоритета
MaxpriorityThreadfactory.java
пакет com.zj.concurrency.executors.factory; import java.util.concurrent.threadfactory; открытый класс maxPriorityThreadFactory реализует ThreadFactory {public Thread NewThread (Runnable R) {Thread T = new Thread (R); t.setPriority (Thread.max_Priority); возврат t; }} Минимальный приоритет
пакет com.zj.concurrency.executors.factory; import java.util.concurrent.threadfactory; открытый класс minpriorityThreadFactory реализует ThreadFactory {public Thread NewThread (Runnable R) {Thread T = New Thread (R); T.SetPriority (Thread.min_Priority); возврат t; }}
5.3 Запуск потока с настройками атрибута
Execfromfactory.java
пакет com.zj.concurrency.executors; import java.util.concurrent.executorservice; import java.util.concurrent.executors; импорт com.zj.concurrency.executors.factory.maxportytory; импорт com.zj.concurrency.executors.factory.maxporitytory; импорт. com.zj.concurrency.executors.factory.minpriorityThreadFactory; public class execfromfactory {public static void main (string [] args) выбрасывает исключение {receemorservice defaultexec = executors.newcachedthreadpool (); Executorerservice daemonexec = Executors .newcachedThreadpool (новый DaeMonthreadFactory ()); Executorservice maxpriorityexec = исполнители .newcachedthreadpool (new maxpriorityThreadfactory ()); Executorservice minpriorityexec = исполнители .newcachedthreadpool (new minpriorityThreadfactory ()); для (int i = 0; i <10; i ++) daemonexec.execute (new Mythread (i)); для (int i = 10; i <20; i ++) if (i == 10) maxpriorityexec.execute (new mythread (i)); иначе if (i == 11) minpriorityexec.execute (new mythread (i)); else delaultexec.execute (new Mythread (i)); }} результат:
Создать Thread-0create Thread-1 Create Thread-2-Create Thread-3thread-0 Запуск 1 Время (S) Thread-0. Запуск 2 Время (S) Thread-1 Запуск 1 Время (S) Thread-1 Запуск 2 Время (S) Thread-2 Запуск 1 Время 2 Запуск 2 Запустите 2 Время (S) Создание Thread-4thRead-4 Запуск 1 Time Thread-4 Запуск 2 Время (s) Создание Thread-5 Run Run. 1 Запуск 1 Время. Thread-6create Thread-7thread-7 Запуск 1 Time (S) Thread-7 Запуск 2 ВРЕМЯ (S) Создать Thread-8thread-8 Запуск 1 Время (S) Thread-8. Запуск 2 Время (S) Создание потока-9Create Thread-10thread-10 Запуск 1 Time (S) Thread-10 Запуск 2 Time (S) Создание Thread-nead-9 Запуск 1 Время. Время (S) Thread-3 Запуск 1 Время (S) Thread-3 Запуск 2 Время (S) Создание потока Thread-12Create Thread-13 Create Thread-12thread-12. Запуск 1 Время (S) Thread-12 Запуск 2 Время (S) Thread-13 Запуск 1 Время (S) Thread-2 Запуск 2 Время (S) Создание Thread-1thRead-15 Запуск 1 Запуск 2 Запуск 2 Запуск 2 Время. Время (s) Создание потока Thread-17create Thread-18create Thread-19thread-14 Запуск 1 Время (S) Thread-14 Запуск 2 Время (S) Thread-17 Запуск 1 Время (S) Thread-17 Запуск 2 Время (S) Thread-18 Запуск 1 Время (S) Thread-18 Запустите 2 Время (S). Запуск 1 Время (S) Thread-Trath (S) Thread-1 Запуск 1 Time (S) Thread-1 Thread-1 Thread-STURD (S).