Создал executor с единственным потоком,
private ExecutorService executorService = Executors.newSingleThreadExecutor();
передаю ему Thread в submit,
private final Thread longPollingThread = new Thread(new LongPollingThread());
но выходит предупреждение в SonarLint в IDEA что ожидается использование Runnable вместо Thread и так нельзя делать, но мне нужно останавливать Thread путем вызов
longPollingThread.interrupt();
а без оборачивания или унаследования от Thread Такое вызвать не получится. в потоке я проверяю вот так
while (!Thread.currentThread().isInterrupted())
вопрос как мне быть, чтобы прерывать поток, можно было бы создать какой метод типа close и уже там менять boolean isStop, но зачем когда есть такая возможность.
Используйте Future, который возвращается методом executorService.submit(...), а затем вызывайте future.cancel с параметром mayInterruptIfRunning равным true
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<?> future = executorService.submit(() -> {
int i = 0;
System.out.print(i++);
});
future.cancel(true);
Thread.currentThread().isInterrupted() можно заменить на future.isCancelled или future.isDone, в зависимости от того, какую цель вы преследуете. Конкретно логику работы методов из Future можно прочитать по ссылке в начале моего ответа, или в javadoc, кликнув по классу Future с зажатой клавишей ctrl (перейти в реализацию класса)
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники