Метод newSingleThreadExecutor
Метод newSingleThreadExecutor класса Executors создает
исполнитель ExecutorService с одним рабочим потоком.
Все задачи, переданные этому исполнителю, выполняются
последовательно в том порядке, в котором они были отправлены.
Если во время выполнения задачи поток завершается из-за исключения,
исполнитель автоматически создает новый поток для продолжения
работы с оставшимися задачами. Метод не принимает параметров
и возвращает объект ExecutorService, готовый к принятию задач.
Синтаксис
Executors.newSingleThreadExecutor()
Пример
Давайте создадим однопоточный исполнитель и отправим ему несколько задач, чтобы убедиться в их последовательном выполнении:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> System.out.println("task 1"));
executor.execute(() -> System.out.println("task 2"));
executor.execute(() -> System.out.println("task 3"));
executor.shutdown();
}
}
Результат выполнения кода:
task 1
task 2
task 3
Пример
Давайте отправим задачи через submit и получим
результат их выполнения через объект Future:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Main
{
public static void main(String[] args) throws Exception
{
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(() -> 1 + 2);
Integer res = future.get();
System.out.println(res);
executor.shutdown();
}
}
Результат выполнения кода:
3
Пример
Давайте проверим, что все задачи выполняются в одном и том же потоке:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> System.out.println(Thread.currentThread().getName()));
executor.execute(() -> System.out.println(Thread.currentThread().getName()));
executor.execute(() -> System.out.println(Thread.currentThread().getName()));
executor.shutdown();
}
}
Результат выполнения кода:
pool-1-thread-1
pool-1-thread-1
pool-1-thread-1
Смотрите также
-
класс
ExecutorService,
который представляет собой исполнитель задач -
метод
submit,
который отправляет задачу на выполнение и возвращает Future -
метод
execute,
который запускает задачу без возврата результата -
метод
shutdown,
который корректно завершает работу исполнителя