1 причины внедрения пулов потоков
Поскольку жизненный цикл потока включает в себя создание, готовое, бега, блокирование и уничтожение этапов, когда количество задач, которые мы рассмотрим, мало, мы можем самостоятельно создать несколько потоков для выполнения соответствующих задач, но когда существует большое количество Из задач, создание и уничтожение потоков требует много накладных расходов, и использование пулов потоков значительно облегчит эти проблемы.
2 Использование пула потоков
Нам нужно только использовать статический метод, предоставленный классом исполнителей для создания соответствующего пула потоков:
Public Static Executvice NewsingleThreadExeCutor () Public Static Executevice NewFixedThreadPool () Public Static Executvice Newcachedthre Adpool ()
Newsingletreadexecutor возвращает исполнителя, содержащего один поток.
NewFixedThreadpool возвращает пул потоков, содержащий указанное количество потоков.
NewcachedThreadpool создает соответствующие потоки на основе количества задач пользователя.
Нам нужно только поместить задачу для выполнения в метод выполнения, и передать класс реализации запускаемого интерфейса методу выполнения пула потоков в качестве параметра, как показано ниже:
Исполнитель executor = executors.newsingleThreadExeCutor (); executor.execute (new Runnable () {public void run () {// выполняемые задачи}}Если вам нужно передать параметры в задачу, вы можете сделать это, создав класс реализации для выполняемого интерфейса.
3. Пример
(1): NewsingLethreadExeCutor
Mythread.java
PublicClassMyThread Extends Thread {@Override publicvoid run () {System.out.println (thread.currentThread (). getName () + "execution ..."); {/ Создать пул потоков, который может повторно использовать фиксированное количество потоков, исполнители = исполнители. ; Thread T2 = Mythread (); Bool.execu te (T2); Результат вывода
Pool-1-Thread-1 выполняется. Полем Полем Pool-1-Thread-1 выполняется. Полем Полем Pool-1-Thread-1 выполняется. Полем Полем Pool-1-Thread-1 выполняется. Полем Полем Pool-1-Thread-1 выполняется. Полем Полем
(2): newfixedthreadpool
Testfixedthreadpool.java
publicclass testfixedthreadpool {publicstaticvoid main (string [] args) {// Создать пул потоков, который может повторно использовать фиксированное количество потоков executorservice pool = executors.newfixedthreadpo ol (2); Заполненный поток интерфейса T1 = Mythread (); Pool Exepute.execute (T1); }} Результат вывода
Pool-1-Thread-1 выполняется. Полем Полем Pool-1-Thread-2 выполняется. Полем Полем Pool-1-Thread-1 выполняется. Полем Полем Pool-1-Thread-2 выполняется. Полем Полем Pool-1-Thread-1 выполняется. Полем Полем
(3): newcachedthreadpool
Testcachedthreadpool.java
publicclass testcachedthreadpool {publicstaticvoid main (string [] args) {// Создать пул потоков, который может повторно использовать фиксированное количество потоков executorservice pool = expertions.newcachedThread Pool (); Поток интерфейса T1 = New Mythread (); Выполнить в пул. Execute (T1); } Результат вывода:
Pool-1-Thread-2 выполняется. Полем Полем Pool-1-Thread-4 выполняется. Полем Полем Pool-1-Thread-3 выполняется. Полем Полем Pool-1-Thread-1 выполняется. Полем Полем Pool-1-Thread-5 выполняется. Полем Полем
(4): NewschedledThreadpool
TestscheduledThreadPoolexeCutor.java
publicclass testscheduledthreadpoolexecutor {publicstaticvoid main (string [] args) {predicledthreadpoolexecutor exec = new PredicledThreadPoolexecut tor (1); Бросьте новое runtimeexception (); ============================================================================= =========== runna ble () {// распечатать системное время время от времени, доказывая, что они не влияют друг на друга @Override publicvoid run () {System.out.println (System.nanotime ()); Результат вывода
============================================================================= ============================================================================= ============================================================================= ============================================================================= ============================================================================= =====