Что отправлять на выполнение в тредпулл, runnable или thread

212
15 февраля 2018, 14:56

Создал 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, но зачем когда есть такая возможность.

Answer 1

Используйте 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 (перейти в реализацию класса)

READ ALSO
Где найти развернутое описание класса BigDecimal?

Где найти развернутое описание класса BigDecimal?

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

139
Замаппить объекты в Java JPA

Замаппить объекты в Java JPA

Имеется следующая структура БД PostgreSQL:

162
Проверки электронной подписи ЕСИА openId

Проверки электронной подписи ЕСИА openId

Добрый день! Пишу интеграцию с есиа по opendid connect на javaНазрел вопрос по проверки подписи маркера доступа/идентификации

201