|
|
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
Подскажите плиз как решить задачу. Запускается на Spring Есть определенный метод Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В интерфейсе выводится список person, и в каждой строке есть кнопка, по которой определенному человеку можно изменить статус - Код: java 1. Таким образом когда этот цикл проходит 10000 человек, то должна быть возможность убрать з цикла некоторых person. То есть уже в процессе запущенного цикла можно нажать для person789 кнопку и запрос Код: java 1. будет возвращать false. Но по факту при нажатии кнопки person.setWaitSalary(false) цикл не прерывается, а доходит до конца, и только после окончания цикла статус того person, которому нажали кнопку, меняется на false - когда это уже естественно никому не нужно. Как правильно решить такую задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 23:20:41 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
oson, я думаю, надо программировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 09:21:40 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
oson, Метод работает в отдельном потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 09:40:59 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
oson, Не совсем понял задачу, но думаю вам стоит посмотреть в сторону модификатора volatile. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 10:53:20 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
Ну задача такая. Работает метод в цикле, обрабатывает список, и надо иметь возможность влиять на эту обработку внешней кнопкой в веб интерфейсе. Просто вставить внутрь метода какой то булевский флаг, который переводить в состояние false, и тогда метод должен остановиться, не получается. Реакция на нажатие этой кнопки происходит только после окончания ВСЕГО метода. Чтобы репродюсить в медленном темпе и успевать нажать кнопку, я ставлю там Thread.sleep(10000). Но метод ждет каждые 10 секунд, затем продолжает работу, и не обращает внимание на нажатую кнопку. И только когда он полностью закончится, наконец происходит реакция на кнопку, булевская переменная переключается в false, но это естественно уже ни на что не влияет, так как метод и так закончился. Запущено в контейнере Spring. Я предполагаю что подход в корне неверный :) Как то решается такая задача? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 12:29:37 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
oson, Вы говорите про "нажатую кнопку", а в коде person.isWaitSalary(); Между "нажатой кнопкой" и person.isWaitSalary() просто пропасть кода. Но при этом вы хотите чтобы вам подсказали где именно в том коде у вас ошибка? Где гарантии что ваша кнопка вообще как-то свяазана с этим isWaitSalary() конкретного объекта person? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 12:36:16 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
Ты жжошь. У тебя выполнение цикла и нажатие кнопки в одном потоке происходит? Естественно оно будет выполняться последовательно. Тебе надо вынести цикл в отдельный поток, и как то синхронизировать свой лист персонов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 12:40:07 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
Да я понимаю, что таким прямым способом я н остановлю цикл. Запускается какой-то процесс внутри Spring контейнера, и тут я должен каким-то способом запустить другой процесс нажатием кнопки, чтобы он повлиял на первый. Возможно ли вообще такое? Мне кажется сделать такой стабильный код вообще невозможно, потому что тут надо влезать во внутреннюю реализацию Spring контейнера. А может быть этот первый процесс вообще проходит без прерываний и я из второго процесса не смогу никак на него повлиять. Правильно я понимаю, или все же есть какой то способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 15:55:13 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
osonЗапускается какой-то процесс внутри Spring контейнера, и тут я должен каким-то способом запустить другой процесс нажатием кнопки, чтобы он повлиял на первый. Возможно ли вообще такое? нет, на данном уровне научного развития это неразрешимая задача. oson Мне кажется сделать такой стабильный код вообще невозможно, потому что тут надо влезать во внутреннюю реализацию Spring здесь спринг вообще сбоку. задача на многопоточное программирование. правда не понятна ее постановка - тараканьи бега какие-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 16:02:06 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
osonДа я понимаю, что таким прямым способом я н остановлю цикл. Запускается какой-то процесс внутри Spring контейнера, и тут я должен каким-то способом запустить другой процесс нажатием кнопки, чтобы он повлиял на первый. Возможно ли вообще такое? Мне кажется сделать такой стабильный код вообще невозможно, потому что тут надо влезать во внутреннюю реализацию Spring контейнера. А может быть этот первый процесс вообще проходит без прерываний и я из второго процесса не смогу никак на него повлиять. Правильно я понимаю, или все же есть какой то способ? "внутренняя реализация Spring контейнера" к теме вообще отношения не имеет. Нужно разбраться в некоторых вопросах - Что такое Thread? - Как один Thread может взаимодействовать с другим? - Какой код выполняется в потоках, создаваемых JEE контейнером и как самому создавать потоки в рамках JEE приложения? - Что такое очередь? После того как на эти вопросы удаться дать какой-то внятный ответ, можно приступить к вопросу, как это всё применить к вашей задаче. Какой-то из 4х вопросов выше вызывает затруднение, или это всё давно знакомо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 16:02:33 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
Использовал класс Thread только когда-то, когда надо было чтобы кнопка в Swing приложении была доступна при интенсивно перерисовывающейся картинке. Про взаимодействие потоков тема как-то прошла мимо. Что почитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 23:42:07 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
osonИспользовал класс Thread только когда-то Дело не в самом классе Thread. А в принципиальном понимании что такое "поток". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 00:02:25 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
oson, Любая книга по Java. Раздел о многопоточном программировании. Модификатор volatile. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 00:06:45 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
Примерно так: Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 00:47:13 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
Зачем здесь Thread'ы? Может session-scoped бина достачно, раз уж спрмнг используется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 07:50:04 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
WGAЗачем здесь Thread'ы? Может session-scoped бина достачно, раз уж спрмнг используется... Как тут можно использовать session bean? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 18:18:07 |
|
||
|
Выйти из метода
|
|||
|---|---|---|---|
|
#18+
osonКак тут можно использовать session bean? Типа такого можно попробовать. http://stackoverflow.com/questions/2900086/how-can-i-return-a-future-object-with-spring-without-writing-concurrency-logic Вместо AsyncResult использовать свой Future, который можно прерывать Future.cancel(). А в цикле проверять Future.isCanceled(); Соответственно, при старте задачи, Future сохранить в session scoped bean. А при нажатии кнопки отмены у Future вызывать Cancel. Единственное что у вас там по каждой отдельной Person флаг. Нужно, значит, хранить что-ти типа LinkedHashMap<Future<Person>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 18:43:22 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38197478&tid=2129621]: |
0ms |
get settings: |
18ms |
get forum list: |
28ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
68ms |
get topic data: |
24ms |
get forum data: |
6ms |
get page messages: |
101ms |
get tp. blocked users: |
2ms |
| others: | 292ms |
| total: | 555ms |

| 0 / 0 |
