|
|
|
Логика метода WebCrawler#stop [Concurrency in practice 7.2.5]
|
|||
|---|---|---|---|
|
#18+
Экзекутор, который умеет возвращать не только не начатые задачи, но и те, что прерваны в прогрессе: Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. и есть краулер, который этот класс использует Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. Мне не ясен код метода stop: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 1 - exec.shutdownNow() - возвращает ещё не начатые задачи Во второй строчке мы ждём пока задачи исполнят нашу фразу о прерывании. Этого может и не произойти. Как я понял могут быть false positive результаты из-за того, что задача например не предусматривает cancellation. А ждать нам надо ибо только в конце исполнения эти задачи попадут в коллекцию внутри экзекутора. В случае если дождались, то понятно, добавляем задачи - радуемся жизни. 4- а вот если не дождались, то что это за чудо код? зачем он? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2017, 12:18 |
|
||
|
Логика метода WebCrawler#stop [Concurrency in practice 7.2.5]
|
|||
|---|---|---|---|
|
#18+
questioner, автор4- а вот если не дождались, то что это за чудо код? зачем он? Что бы если интерраптнуть на awaitTermination - сделать доступным для GC TrackingExecutor (естественно после того как все потоки там завершатся рано или поздно). Если awaitTermination не дождется - то рабочие потоки доработают -> либо NPE в submitCrawlTask, либо будут складывать в уже не нужную tasksCancelledAtShutdown, ну либо успеют засунуть туда). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2017, 21:04 |
|
||
|
Логика метода WebCrawler#stop [Concurrency in practice 7.2.5]
|
|||
|---|---|---|---|
|
#18+
no56892questioner, автор4- а вот если не дождались, то что это за чудо код? зачем он? Что бы если интерраптнуть на awaitTermination - сделать доступным для GC TrackingExecutor (естественно после того как все потоки там завершатся рано или поздно). + в случае если isTerminated() == false, тоже IllegalStateException будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2017, 21:22 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=73&tid=2123121]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 395ms |

| 0 / 0 |
