|
|
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток, ребят! Со стороны клиента обращаюсь за данными к серверу (gwt). Есть таблица grid, по нажатию на какую-то строку проиисходит передача id в функцию, которая должна по этому ключу найти данные в другой таблице из бд. Данные типа bytea - могут быть большие размеры. Вот поэтому нужно создать поток, чтобы при нажатии на другую строку таблицы не глючило все. В общем, вопрос касается завершения созданного потока для получения данных из бд Код: java 1. 2. 3. 4. 5. 6. 7. Сам класс FileDownloadThread implement Callable<List<PrintedImages>> Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. И вопрос: можно ли и как остановить поток (предыдущий, если к примеру слишком долго затянулся), при нажатии на другую строку grid? Спасибо всем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 15:10 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Сама пыталась, interrupt, executorservice.shutDown(), но чтение данных из бд по функции ProcessEMF(...) не прекращается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 15:12 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Helen_CobskeeСо стороны клиента обращаюсь за данными к серверу (gwt). Есть таблица grid, по нажатию на какую-то строку проиисходит передача id в функцию, которая должна по этому ключу найти данные в другой таблице из бд. А проблему обязательно решать на сервере? Почему просто не разрулить её на клиенте? Обрабатывать долгоиграющие функции особым образом не блокируя всю страницу? Helen_Cobskee Код: java 1. 2. 3. 4. 5. 6. 7. Этот код лишен смысла, потому что Future.get() блокирует текущий поток до конца выполнения задачи. То есть поток, обрабатывающий запрос от клиента просто работает ещё дольше, чем он бы делал это без ExecutorService Helen_CobskeeИ вопрос: можно ли и как остановить поток (предыдущий, если к примеру слишком долго затянулся), при нажатии на другую строку grid? Вам стоит отделить клиент от сервера для начала. Уж сильно вы их мешаете. В реальности же GWT это JavaScript, который шлет HTTP запросы на Java сервер. Это физически очень разные процессы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 15:34 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, физически у меня разделены клиент и сервер, здесь получилось смешано (куски из кода) BlazkowiczА проблему обязательно решать на сервере? Почему просто не разрулить её на клиенте? Обрабатывать долгоиграющие функции особым образом не блокируя всю страницу? А как на клиентской стороне это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 15:41 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Helen_Cobskee, Хорошо бы разобраться с чего там грид вообще заблокировался. Используйте Scheduler, например. Произошло действие, отправили запрос на сервер и работаем дальше с гридом. Пришел отклик - обновили данные на UI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 15:57 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Helen_Cobskeeфизически у меня разделены клиент и сервер, здесь получилось смешано (куски из кода) Ну, тогда не понятно какую проблему вы пытаетесь решить. Есть грид на клиенте. Он блокируется долгоработающей задачей и ждет сервер. Вы придумали запустить какой-то поток на сервере. Для чего? Как он решит проблему? Чтобы его потом прервать? С тем же успехом можно прервать и текущий поток, зачем новый запускать? И затем вы задаёте вопрос уже по своему решению, как же прервать поток, хотя прерывание потока никак проблему блокировки UI вообще не решает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:02 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Глючит из-за того, что в потоке выполняется чтение данных, если сделать первый клик на записи, где тяжелые bytea, то первые несколько секунд спокойно выполняется и другие нажатия (на менее тяжелые данные bytea), а дальше все виснет до тех пор пока не выполнится полностью тот первый поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:07 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczНу, тогда не понятно какую проблему вы пытаетесь решить. Есть грид на клиенте. Он блокируется долгоработающей задачей и ждет сервер. Вы придумали запустить какой-то поток на сервере. Для чего? Как он решит проблему? Чтобы его потом прервать? С тем же успехом можно прервать и текущий поток, зачем новый запускать? И затем вы задаёте вопрос уже по своему решению, как же прервать поток, хотя прерывание потока никак проблему блокировки UI вообще не решает. ясно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:08 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, тогда Scheduler с таймером? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:09 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Helen_CobskeeГлючит из-за того, что в потоке выполняется чтение данных, если сделать первый клик на записи, где тяжелые bytea, то первые несколько секунд спокойно выполняется и другие нажатия (на менее тяжелые данные bytea), а дальше все виснет до тех пор пока не выполнится полностью тот первый поток. Не понятно ровным счетом ничего. Давайте начнем с того, что на клиенте (GWT) - один поток. Поэтому что такое первый поток, а что последний - не понятно. Речь о запросах на сервер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:11 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Helen_CobskeeBlazkowicz, тогда Scheduler с таймером? Вместо того чтобы загадками говорить показали бы уже ваш GWT код, который тормозит. С сервером-то всё ясно - запрос\ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:12 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Речь о запросах на сервер? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:15 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Есть таблица grid, по ней происходит клик, тогда вызывается метод из другого класса для отображения на панели данных Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. detail, в свою очередь, это компонента для отображения двоичных данных Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ListView реализуется в другом классе, а инициализация происходит процедурой: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:30 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Вот при нажатии на grid будет глючить, если оказалось, что данные слишком тяжелые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:32 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Код: java 1. это обращение на сервер по id, отсюда и пойдут уже выше указанные процессы (поток Callable, ExecutorService ит.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:34 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Helen_Cobskee, Обратите внимание как в этом примере https://www.sencha.com/examples/#ExamplePlace:remotefiltergrid метод Loader.load() завернут в Scheduler ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 16:42 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, зависания не происходит, но и выполнение предыдущего (если он затянулся) обращения тоже не прекращается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 17:16 |
|
||
|
Потоки Java (Callable)
|
|||
|---|---|---|---|
|
#18+
но это наверно так и должно быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 17:17 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=117&tid=2124870]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 329ms |

| 0 / 0 |
