Sobes.tech
Назад к вопросам
Junior — Middle
67

Какими способами можно реализовать или создать интерфейс ExecutorService в Java?

Компании, где спрашивали
Prooftech
ООО Динамика
А Деньги
Северсталь-ИфокомСеверсталь-Ифоком

Ответ от нейросети

sobes.tech AI

Интерфейс ExecutorService в Java можно реализовать несколькими способами, в зависимости от требований к управлению потоками и задачами:

  1. Наследование от AbstractExecutorService — это абстрактный класс, который уже реализует часть логики ExecutorService. Можно создать свой класс, расширяющий его, и реализовать необходимые методы.

  2. Реализация интерфейса ExecutorService напрямую — нужно реализовать все методы интерфейса, включая управление жизненным циклом, выполнение задач, завершение и т.д. Это более трудоёмко.

  3. Использование существующих реализаций и их обёрток — например, можно создать класс, который внутри использует ThreadPoolExecutor или другие реализации, и делегирует им вызовы.

Пример простейшей реализации с наследованием от AbstractExecutorService:

import java.util.concurrent.*;

public class SimpleExecutorService extends AbstractExecutorService {
    private volatile boolean running = true;

    @Override
    public void shutdown() {
        running = false;
    }

    @Override
    public List<Runnable> shutdownNow() {
        shutdown();
        return Collections.emptyList();
    }

    @Override
    public boolean isShutdown() {
        return !running;
    }

    @Override
    public boolean isTerminated() {
        return !running;
    }

    @Override
    public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
        Thread.sleep(unit.toMillis(timeout));
        return isTerminated();
    }

    @Override
    public void execute(Runnable command) {
        if (running) {
            new Thread(command).start();
        } else {
            throw new RejectedExecutionException("ExecutorService is shutdown");
        }
    }
}

Этот пример запускает каждую задачу в новом потоке, что неэффективно для большого количества задач, но демонстрирует базовый принцип реализации.