|
|
|
ScheduledThreadPoolExecutor с ограниченным размером
|
|||
|---|---|---|---|
|
#18+
делаю пул на основе ScheduledThreadPoolExecutor с ограниченным размером (corePoolSize), чтобы после достижения границы, новая задача отвергалась о чем сообщалось, после удаления одного или более работающих тасков можно опять добавлять новые, в целом работает, но после достижения размера и удаления одного таска, перестает вызываться при (submit, execute) фабрика тредов, а запускается ранее отвергнутый тред, видимо сохраняется в query(больше негде), и getQuery().size() всегда равен 0 хотя таски есть и работают, и не когда не происходит RejectedExecutionException, методы getActiveCount(), getCorePoolSize() работают правильно, активные таски уменьшаются и увеличиваются, удаляю работающие таски через сохраненный future.cancel(true), как это выглядит; Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. вызываемый из вне метод на выполнение нового таска Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. этот обработчик никогда не вызывается, пробовал на другом пуле(fixedPool) работает Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 13:12 |
|
||
|
ScheduledThreadPoolExecutor с ограниченным размером
|
|||
|---|---|---|---|
|
#18+
Честно, говоря, не очень понял вашего решения. Но исходя из описание, вам просто нужна специальная очередь нулевого размера для задач, которая бы всегда реджектила эти самые задачи, если их нельзя сразу запустить в свободных потоках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 13:49 |
|
||
|
ScheduledThreadPoolExecutor с ограниченным размером
|
|||
|---|---|---|---|
|
#18+
так не понятного ? хочу чтобы ScheduledThreadPoolExecutor был ограниченный, как тут поможет нулевой размер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 13:58 |
|
||
|
ScheduledThreadPoolExecutor с ограниченным размером
|
|||
|---|---|---|---|
|
#18+
breathтак не понятного ? Не понятно что такое " отвергнутый тред". Отвергаются задачи, а не потоки. Потоки прерываются, если нужно. breathхочу чтобы ScheduledThreadPoolExecutor был ограниченный, как тут поможет нулевой размер Ограниченый по чему? Есть размер пула потоков. Есть размер очереди задач. Если нельзя создать новый поток и очередь отвергает задачу, то вызывается RejectHandler. Там вы можете делать с отвергнутой задачей что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:15 |
|
||
|
ScheduledThreadPoolExecutor с ограниченным размером
|
|||
|---|---|---|---|
|
#18+
>Не понятно что такое " отвергнутый тред". Отвергаются задачи, а не потоки. Потоки прерываются, если нужно. ну при execute или submit сначала порождается thread в ThreadFactory, потом этот тип объекта передается в @Override protected void beforeExecute(Thread t, Runnable r) { поэтому и написал отвергнутый тред, хотя в данном контексте thread == задаче >Ограниченый по чему? Есть размер пула потоков. Есть размер очереди задач. Если нельзя создать новый поток и очередь отвергает задачу, то вызывается RejectHandler. Там вы можете делать с отвергнутой задачей что угодно. это понятно, но в ScheduledThreadPoolExecutor delayedQuery, поэтому мне кажется RejectionHandler от него не дождаться, вот и делаю проверкой на getActiveCount() == getCorePoolSize(), и это срабатывает, как написал после future.cancel, getActiveCount уменьшается, но дальшейшие submit не вызывают фабрику, в этом баг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:39 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38590626&tid=2127478]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 469ms |

| 0 / 0 |
