Кода -копия выглядит следующим образом:
пакет com.yao;
импортировать java.util.concurrent.callable;
Импорт java.util.concurrent.executionException;
импортировать java.util.concurrent.executorservice;
импортировать java.util.concurrent.executors;
импортировать java.util.concurrent.future;
Импорт java.util.concurrent.schedudexecutorservice;
импортировать java.util.concurrent.timeUnit;
/**
* Новая архитектура выполнения задач.
* Перед Java 5.0 задача была начата с вызова метода Start () класса потока.
* Представление и выполнение задачи выполняются одновременно.
* Или контролировать количество выполненных потоков, выполняемых одновременно, требуется дополнительный код для завершения.
* 5.0 предоставляет новую архитектуру выполнения задач, которая позволяет легко планировать и управлять выполнением задач.
* И пул потоков, аналогичный пулу подключения к базе данных, может быть установлен для выполнения задач.
* Эта архитектура в основном состоит из трех интерфейсов и их соответствующих конкретных классов.
*Эти три интерфейса являются исполнителем, исполнителем и PreduledExecutorservice.
* (1) Интерфейс исполнителя: используется для выполнения выполняемых задач, он определяет только один метод:
* execute (runnable command): выполнить задачи Ruannable Type
* (2) Executorservice: наследует метод исполнителя и предоставляет службам выполнять вызовные задачи и прервать выполнение задач.
* Основные методы его определения:
* Отправить (задание): может использоваться для отправки вызова или выполнимых задач и возврата будущего объекта, представляющего эту задачу
* Invokeall (Сбор задач): партийная коллекция задач и вернуть коллекцию будущих объектов, представляющих эти задачи.
* shutdown (): закройте услугу после выполнения отправленной задачи и больше не принимает новые задачи.
* shutdownnow (): останавливает все выполняемые задачи и закрывает службу.
* isTermination (): проверьте, были ли все задачи выполнены.
* isshutdown (): проверить, был ли executorservice закрыт
* (3) DearledExeCutorService: наследует ExecutorService, обеспечивая функцию задач планирования в соответствии со временем,
* Расписание (задача, initdelay): Запланируйте представленную или выполняемую задачу, которая будет выполнена после времени, указанного InitDelay.
* PradeuleAtFixedRate (): Запланируйте представленную выполняемую задачу, которая будет выполнена неоднократно с указанным интервалом.
* PradeuleWithFixedDelay (): Запланируйте представленную выполненную задачу, которая будет выполнена неоднократно после каждого выполнения, дождитесь времени, указанного в результате задержки.
*
* Получить различные объекты службы через класс исполнителей.
* Callibable (выполняемая задача): конвертировать выполняемые задачи в Callable Задачи
* NewsingLethreadExeCutor: генерирует объект ExecutorService, который имеет только один поток, который можно использовать для выполнения задач.
* NewcachedThreadpool (): генерирует объект Executorservice, который имеет пул потоков.
* newfixedThreadpool (int poolsize): генерирует объект Executorservice, который имеет пул потоков размеров.
* NewsingLethreadScheduleDexeCutor: генерирует объект PreduledExeCutorService, размер пула потоков этого объекта составляет 1. Если есть более одного задачи, задачи будут выполняться в последовательности.
* NewschedThreadpool (int poolsize): генерирует объект PredicleDexeCutorService, размер пула потоков этого объекта имеет PoolSize.
*/
открытый класс executearch {
/**
* Этот поток выводит строку
*/
публичный статический класс Mythread реализует runnable {
public void run () {
System.out.println ("Задача повторяется." + System.currenttimemillis ());
пытаться {
Thread.sleep (1000);
} catch (прерванная экспрессия e) {
System.out.println («Задача прервана».
+ System.currentTimeMiLsis ());
}
}
}
/**
* Вызов заканчивается еще одна задача
*/
Общественный статический класс MyCallable реализует Callable {
частное будущее;
public MyCallable (будущее) {
this.future = будущее;
}
public String call () {
System.out.println («Чтобы отменить задание ...»
+ + System.currenttimemillis ());
this.future.cancel (true);
вернуть "Задача отменена!";
}
}
/**
* @param args
* @Throws executionException
* @Throws прерывается
*/
общественный статический void main (string [] args) бросает прерывания,
ExecutionException {
// Сгенерировать объект ExecutorService, который имеет пул потоков, а размер пула потоков будет регулироваться по мере необходимости.
// После того, как поток выполняет задачу, он возвращается в пул потоков для следующей задачи.
Executorservice cachedservice = executors.newcachedthreadpool ();
Будущее mythreadfuture = cachedservice.submit (new mythread ());
Future MyCallableFuture = cachedService.submit (новый MyCallable (
mythreadfuture));
System.out.println (mycallablefuture.get ());
System.out.println ("-----------------");
// преобразовать выполняемые задачи в выигрываемые задачи
Callible mythreadcallable = executors.callable (new mythread ());
Будущий mythreadcallablefuture = cachedservice.submit (mythreadcallable);
// для выполняемых задач не возвращается значение после преобразования в вызов
System.out.println (mythreadcallablefuture.get ());
cachedservice.shutdownnow ();
System.out.println ("-----------------");
// Сгенерируйте объект ExecutorService, который имеет пул потоков размеров.
// Если количество задач больше, чем PoolSize, задачи будут выполняться в очереди в последовательности
Executorservice fixedservice = executors.newfixedthreadpool (2);
fixedservice.submit (new Mythread ());
fixedservice.submit (new Mythread ());
// Поскольку размер пула потоков составляет 2, последующие задачи должны ждать выполнения предыдущих задач, прежде чем они могут быть выполнены.
mythreadfuture = fixedservice.submit (new Mythread ());
mycallablefuture = fixedservice.submit (new MyCallable (mythreadfuture));
System.out.println (mycallablefuture.get ());
fixedservice.shutdownnow ();
System.out.println ("-----------------");
// Сгенерировать объект PredicleDexeCutorService, размер пула потоков этого объекта - PoolSize.
// Если количество задач больше, чем PoolSize, задача будет ждать выполнения в очереди
PreduledExeCutorService FixedSchededService = Исполнители
.newschedledThreadpool (2);
// Создать новую задачу 1
MyThread Task1 = New Mythread ();
// Используйте службу выполнения задачи для немедленного выполнения задачи 1, а затем выполнять задачу 1 каждые 2 секунды после этого.
mythreadfuture = fixedscheduledservice.scheduleatfixedrate (task1, 0, 2,
TimeUnit.seconds);
// Создать новую задачу 2
MyCallable Task2 = новый MyCallable (MythreadFuture);
// Использование Службы выполнения задачи, чтобы дождаться 5 секунд, прежде чем выполнить задачу 2. После выполнения его задача 1 будет закрыта.
MyCallableFuture = FixedScheduledService.schedule (Task2, 5,
TimeUnit.seconds);
System.out.println (mycallablefuture.get ());
fixedschedledservice.shutdownnow ();
}
}