powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по ThreadPoolTaskScheduler
13 сообщений из 13, страница 1 из 1
Вопрос по ThreadPoolTaskScheduler
    #38950464
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. У меня вопросик по Spring ThreadPoolTaskScheduler
Создаются потоки типа:
Код: java
1.
2.
3.
4.
StartSearch implements Runnable{
private ScheduledFuture<StartSearch> scheduledFuture;

get, set ...


Далее :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 @Autowired
 ThreadPoolTaskScheduler taskScheduler;

  for(int i=0; i<10; i++){
      StartSearch startSearch = new StartSearch();
ScheduledFuture<StartSearch> scheduledFuture = (ScheduledFuture<StartSearch>)taskScheduler.scheduleWithFixedDelay(startSearch, 1000);
          // устанавливаю scheduledFuture в созданный поток
          startSearch.setScheduledFuture(scheduledFuture);
  }  


В StartSearch в методе run есть счетчик int count, при достижении count=5 убиваю поток:
Код: java
1.
scheduledFuture.cancel(true);


Не знаю на сколько правильно так делать, но все работает (если у кого-то есть замечания как сделать это лучше, с радостью послушаю).
И главный вопрос: вот крутится у меня например 10 потоков, как мне отменить какой-то конкретный не дожидаясь пока он отменится по счетчику. Другими словами, есть ли какой-то метод в ThreadPoolTaskScheduler, который умеет останавливать какой-то конкретный ScheduledFuture<StartSearch> scheduledFuture.
Спасибо!
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38950467
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно конечно складировать в какой-нибудь Set, но....
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38950829
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решила-таки сохранять все свои StartSearch implements Runnable{
в Set и после при определенных условиях отменять эти потоки. Не знаю, может перфекционизм мешает, но как-то не совсем нравится этот способ, кто из уважаемых экспертов прокомментирует мою дилемму?
Спасибо
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38950837
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не оперируете потоками и не отменяете их. Вы оперируете задачами. Не понятно в чем проблема с cancel().
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38950845
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Спасибо за отклик. Корректно ли в данном случае хранить задачи в Set-е, разве в ThreadPoolTaskScheduler они не складируются? Ведь есть же метод getActiveCountThread(как-то так он называется), почему в нем нет метода для возвращения списка активных задач?
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38950848
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет никаких "активных" задач. Есть очередь.
http://docs.spring.io/spring-framework/docs/4.1.6.RELEASE/javadoc-api/org/springframework/scheduling/concurrent/ThreadPoolTaskScheduler.html#createExecutor-int-java.util.concurrent.ThreadFactory-java.util.concurrent.RejectedExecutionHandler-

ThreadPoolTaskScheduler имеет метод createExecutor, который создает внутренний скедулер из j.u.c. У того скедулера есть метод getQueue(), который возвращает ссылку на очередь задач.
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38950858
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНет никаких "активных" задач. Есть очередь.
http://docs.spring.io/spring-framework/docs/4.1.6.RELEASE/javadoc-api/org/springframework/scheduling/concurrent/ThreadPoolTaskScheduler.html#createExecutor-int-java.util.concurrent.ThreadFactory-java.util.concurrent.RejectedExecutionHandler-

ThreadPoolTaskScheduler имеет метод createExecutor, который создает внутренний скедулер из j.u.c. У того скедулера есть метод getQueue(), который возвращает ссылку на очередь задач.
В
Код: java
1.
ScheduledExecutorService

нет метода
Код: java
1.
getQueue()

, такой метод есть в его реализации
Код: java
1.
2.
3.
ScheduledThreadPoolExecutor
        extends ThreadPoolExecutor
        implements ScheduledExecutorService


а вот в
Код: java
1.
ScheduledThreadPoolExecutor

такой метод есть, т.е., как я поняла,
Код: java
1.
taskScheduler.getScheduledThreadPoolExecutor().getQueue()

вернет мне очередь активных задач из которой я смогу извлечь нужную и отменить. Правильно?
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38951184
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу разобраться хоть убейте.
Получаю очередь задач:
Код: java
1.
BlockingQueue queueMission = taskScheduler.getScheduledThreadPoolExecutor().getQueue();


LOGGER.info("collection: "+queueMission); возвращает:
Код: java
1.
collection: [java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@5575e105, java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@6fb6b53e, java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@6a3358b1]


Как мне теперь взять и отменить какую-то конкретную задачу находящуюся в этой коллекции, а остальные оставить работать дальше?
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38951185
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

Нужно поменять создание ExecutorService и передавать ему свою собственную очередь, тип которой вам известен и к которой вы можете иметь полный доступ.
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38951186
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, не понятно чем не устраивает список Future, которые можно проверять и отменять при желании. Выгоды от прямого доступа в очередь, вроде и нет особой.
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38951219
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЧестно говоря, не понятно чем не устраивает список Future, которые можно проверять и отменять при желании. Выгоды от прямого доступа в очередь, вроде и нет особой.
Вы про это: https://spring.io/guides/gs/async-method/
?
И что вы имеете ввиду под списком? Т.е. создавать каждый раз Future выполняющий определенную логику в отдельном потоке, при этом складировать их в какой-нибудь Set (или куда лучше?), после, если, например, захочу отменить какую-нибудь задачу, я лезу в этот сет, ищу нужную мне таску и отменяю ее? У меня как раз сейчас так все и работает, но мне не нравится, что я завожу отельную коллекцию для этого, хочется использовать встроенные средства самого пула (типа getQueque..) и дальше уже работать с объектами этой очереди.
И еще, вы пишите "Нужно поменять создание ExecutorService и передавать ему свою собственную очередь", как это сделать объясните пожалуйста?
Спасибо!
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38951402
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTИ еще, вы пишите "Нужно поменять создание ExecutorService и передавать ему свою собственную очередь", как это сделать объясните пожалуйста?

http://stackoverflow.com/a/13514605
...
Рейтинг: 0 / 0
Вопрос по ThreadPoolTaskScheduler
    #38951469
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJulTИ еще, вы пишите "Нужно поменять создание ExecutorService и передавать ему свою собственную очередь", как это сделать объясните пожалуйста?

http://stackoverflow.com/a/13514605
Я вам безумно благодарна! :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по ThreadPoolTaskScheduler
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]