Создал 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
(перейти в реализацию класса)
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Добрый день, на каком русскоязычном сайте можно прочесть разжеванную для новичка информацию про использования класса BigDecimal, в частности...
Добрый день! Пишу интеграцию с есиа по opendid connect на javaНазрел вопрос по проверки подписи маркера доступа/идентификации