|
|
|
Шаблон Observer: как заставить наблюдателя вести обработку в другом потоке ?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть вычурная задача, навеянная чтением доки: 1. класс, создающий большие нечётные числа (в примере ниже - это NumProducer) и расширяющий класс Observable для оповещения "всех страждущих"; 2 два "страждущих" класса-наблюдателя, ждущих изменений от NumProducer'a: 2.1. NumFactor - его задача есть факторизация BigInteger числа, хранимого в объекте NumProducer (т.е. разложение на простые множители); 2.2. NumLogger - его задача есть запись в лог того BigInteger-числа, что только что создалось и сидит в объекте NumProducer. NumProducer генерит числа в двух потоках (на моей машине они всегда имеют номера 10 и 11). Задача в том, чтобы NumFactor и NumLogger занимались своей обработкой *не* в 10 и11 потоках, а в своих собственных. Не могу понять, как это всё "свести воедино", поможыте плз. Вот код (сильно прошу не пинать, учусь ибо): Код: 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. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. Output: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Как сделать, чтобы для NumLogger'a вместо tid=10/11 было tid=9, и аналогично для NumFactor'a чтобы было tid=8 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2013, 20:25:22 |
|
||
|
Шаблон Observer: как заставить наблюдателя вести обработку в другом потоке ?
|
|||
|---|---|---|---|
|
#18+
зачем вам весь этот огород с обсерверами, если можно создать очередь общую для всех, а все акторы запустить в своем потоке? Одни кладут в очередь, другие достают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2013, 20:42:12 |
|
||
|
Шаблон Observer: как заставить наблюдателя вести обработку в другом потоке ?
|
|||
|---|---|---|---|
|
#18+
забыл никзачем вам весь этот огород с обсерверами, если можно создать очередь общую для всех, а все акторы запустить в своем потоке? Одни кладут в очередь, другие достаютЭто не производственная задача, учёба всего лишь. Просто хочу понять: можно ли заставить наблюдателя молотить в своем потоке (отличном от "оповещателя") или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2013, 20:47:09 |
|
||
|
Шаблон Observer: как заставить наблюдателя вести обработку в другом потоке ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis , Вынужден признать, что задача звучит очень бредово, даже для обучения. Кто кладет? Куда кладет? Зачем кладет? Непонятно. Хотите поэкспериментировать с передачей задачи из потока в поток - напишите свой thread pool. Пускай у вас будет объект, в котором хранится некая очередь задач. Пускай у вас будет N потоков, которые слушают эту очередь, и в момент появления в ней задачи, забирают ее оттуда, и пытаются выполнить. - Сделайте это через synchronized/wait/notifyAll - Сделайте это через Lock/await/signalAll - Сделайте это через BlockingQueue - Сделайте это через Semaphore - Да хоть через Atomic'и это сделайте Вот тогда вы многое поймете. А сейчас вы взяли две несвязанные задачи - паттерн и передачу данных между потоками - и пытаетесь скрестись уже с ежом. Само собой, получается какая-то хрень. Лучше учитесь этим вещам иолированно. Потоки - потокам, паттерны - паттернам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2013, 21:26:22 |
|
||
|
Шаблон Observer: как заставить наблюдателя вести обработку в другом потоке ?
|
|||
|---|---|---|---|
|
#18+
cdtyjvКто кладет? Куда кладет? Зачем кладет? Непонятно.Ну, вот такой получилась эта задачка в голове моей... сам себе выдумал... :-) ОК, попробую методы, которые Вы перечислили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2013, 21:31:20 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38441858&tid=2128337]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
254ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 501ms |

| 0 / 0 |
