Забегаемые, вызов, будущее, футуретак, исполнители, экстеры, эксперторы и threadpoolexcetor в Java суммирует эти ключевые слова и их использование.
Сначала классифицируйте их:
Пробегая, призванная
Будущее, FutureTask
Исполнители, экстер, эксперторы, threadpoolexcetor
1. О РАСПОЛОЖЕНИЕ И КОЖ
Прежде всего, есть три способа создания потоков в Java:
Преимущества и недостатки трех реализаций:
Из -за наследственного потока, другие классы не могут быть унаследованы, и текущий поток это можно получить.
Реализуйте запускаемый интерфейс, без возврата значения, получите текущий поток потока. CurrentThread ()
Реализуйте Callable Interface, вы можете получить возвращаемое значение до Future.get () и получить текущий поток потока. CurrentThread ()
Наследственная нить, два шага:
класс Demothread Extends Thread {@Override public void run () {super.run (); // выполнять трудоемкую операцию ...}} demothread t = new Demothread (); T.Start ();Для реализации пробега, как правило, используется следующим образом:
новый поток (new Runnable () {@Override public void run () {// сделать что -нибудь}}). start ();Для простоты.
Довольно трудно получить результаты выполнения потока в двух вышеуказанных методах и не может быть получено напрямую. JDK1.5 добавляет Callable, Callible's Call () метод для возврата значений и бросания исключений. Callible может вернуть будущий объект, загруженный результатами расчета.
Выводимый исходный код:
Общедоступный интерфейс Callable <v> {v call () бросает исключение;}Основное использование Callable:
FutureTask <Integer> futureTask = new FutureTask <integer> (новый Callable <Integer> () {@Override public integer call () бросает исключение {// что -то возвращать null;}}); Thread Think = new Thread (futureTask); Thread.Start (); integer result = futureSkask.get ();Запуск задачи Callable может получить будущий объект и получить возвращаемое значение, выполненное потоком с помощью метода get () будущего. Тогда ... будущее,
В чем разница между FutureTask и как ее использовать?
-> Next ()
2. О будущем и FutureTask
Чтобы получить результаты выполнения потока, была введена FutureTask FutureTask. Так каковы их отношения и как их использовать?
Будущий класс расположен в пакете Java.Util.concurrent, который является интерфейсом:
Public Interface Future <v> {Boolean Cancel (Boolean MayIntertifrunning); логический iscancelled (); логический isdone (); V get () бросает прерванную экспрессию, executionException; V Get (Long Timeout, TimeUnit Unit) Throws TreamptedException, executionException, TimeOutException;}Будущее определяет 5 методов:
1) Boolean Cancel (Boolean MayIntertifrunning): попытка отменить выполнение этой задачи. Эта попытка потерпит неудачу, если задача была выполнена или была отменена или не может быть отменена по какой -либо другой причине. Когда называется Cancel (), если вызов успешно и задача не была запущена, задача никогда не будет работать. Если задача была начата, параметр MayIntertifrunning определяет, следует ли прервать поток, выполняющий задачу таким образом, чтобы попытаться остановить задачу. После возвращения этого метода последующие вызовы в isdone () всегда будут возвращать true. Если этот метод возвращает true, последующие вызовы в isCancelled () всегда вернут True.
2) Boolean Iscancelled (): вернуть true, если задача отменяется до того, как она завершится нормально.
3) BOOLEAN ISDONE (): вернуть True, если задача была выполнена. Это может быть сделано из -за нормального прекращения, исключения или отмены, во всех этих случаях этот метод вернет True.
4) v get () бросает прерванную экспрессию, выполнение ExectionException: При необходимости дождитесь завершения расчета, а затем получите его результат.
5) v Получить (длительный тайм -аут, временной единицы) бросает прерывания, выполняет, выполняет экспресс, время, время, при необходимости, подождите больше всего после данного времени, чтобы завершить расчет и получить результат (если результат доступен).
В целом, будущее предоставляет три функции:
Определить, выполнена ли задача;
Способность прерывать задачи;
Способен получить результаты выполнения задачи.
Ключевые моменты:
RunnableFuture наследует запускаемый интерфейс и интерфейс будущего, в то время как FutureTask реализует интерфейс RunnableFuture.
Реализация FutureTask:
открытый класс FutureTask <v> реализует RunnableFuture <v>
Реализация интерфейса RunnableFuture:
Public Interface RunnableFuture <v> Extends Runnable, Future <v> {void run ();}FutureTask - это уникальный класс реализации будущего интерфейса.
В дополнение к упаковке FutureTask с помощью потока, есть еще один способ его использовать:
Executorservice executor = executors.newcachedthreadpool (); futureTask <Integer> futureTask = new FutureTask <Integer> (новый Callable <Integer> () {@Override public integer call () throws execure {// do return null;}}); rececutor.submit (futureTask); Структура исполнителя используется здесь.
-> next ();
3. О исполнительнике, экстеры, экспертере, ThreadPoolexcetor
Структура исполнителя была введена в Java 5. Структура исполнителя - это структура, которая выполняет асинхронные задачи на основе набора вызовов политики, планирования, выполнения и управления.
Прежде чем говорить о структуре исполнителя, нам нужно представить новую концепцию - ThreadPoolexeCutor:
Public ThreadPoolexeCutor (IntcorePoolsize, int maximumpoolsize, Long KeepaliveTime, TimeUnit Unit, Blockingqueue <Runnable> Workqueue, Threadfactory Threatfactory, DifuctedExecutionHandler Handler)
ThreadPoolexeCutor является основной реализацией класса исполнителей.
В справочной документации JDK есть отрывок:
«Настоятельно рекомендуется, чтобы программисты использовали более удобные заводские методы исполнителей. NewCachedThreadPool () (безграничный пул потоков, который может выполнять автоматическую переработку потока), Executors.newFixedThreadpool (int) (пул потоков с фиксированным размером) и исполнители. NewsingleTheRexeCutor () (по отдельному фону), все, что предсказано.
Так что же такое исполнители, экзет и экстеры?
Excetor является основным интерфейсом на абстрактном уровне:
Исполнитель Public Interface {void execute (runnable command);}Интерфейс ExecutorService расширяет интерфейс Executor и предоставляет такие методы, как возврат будущих объектов, завершение, закрытие пулов потоков и т. Д.
public interface executorservice extends executor {void shutdown (); <T> будущее <T> отправить (Callible <t> задача); <T> будущее <T> отправить (выполняемое задание, t result); <T> List <Future <T >> Invokeall (Collection <? Extends Callable <T>> Задачи, длительный тайм -аут, время TimeUnit) бросает прерыванияИсполнители - это класс инструментов, похожий на коллекции. Предоставляет заводские методы для создания различных типов пулов потоков, таких как Fixedthreadpool или CachedThreadpool.
Исполнители открытого класса {public static executorservice newfixedthreadpool (int nthreads) {return new ThreadPoolexeCutor (nthreads, nThreads, 0l, TimeUnit.milliseconds, new LinkedBlockingqueue <Runnable> ()); } public static executorService newcachedThreadpool () {return new ThreadPoolexeCutor (0, integer.max_value, 60L, timeUnit.seconds, new Synchronouseue <lunnable> ()); }}Выше приведено сборник многопоточных ключевых слов Java, поэтому они не будут грязными.
Выше приведено реализация многопоточной сортировки ключевых слов в Java, представленной редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!