|
|
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Привет! Честно говоря не смог более точно сформировать вопрос в теме и попробую его разложить тут. Чувствую как мое приложение на Swing начинает тормозить. Тормоза не из-за интерфейса и не из-за не правильного использования ресурсов. Приложение работает с БД Орасле. На определенных этапах необходимо делать множество обращений к БД за данными. Данных не много, а обращений много. Задумался об отдельных, фоновых процессах (Thread). В общем исход таков: Есть метод , в котором происходит те самые обращения и загрузка из БД. Метод должен вернуть результат (например boolean). Сейчас в методе все выполняется поэтапно. Т.е. обратились к одной талбички, загрузили ее, потом к другой, потом к третьей и т.д. После того как обращения и загрузка всех таблиц завершена, возврат метода . З.Ы. Просьба не предлагать варианты решения, типа "Сделай один общий SQL" ибо вопрос с подтекстом и тут я привел пример, а в реальности может быть совсем не SQL. Так вот, думал про то, чтобы каждое обращение и загрузку отдельной таблицы засунуть в отдельный процесс и попробовать запараллелить их, но проблема в том, что при возврате метода все процессы должны быть гарантированно завершены. Я не знаю как это сделать. Есть у кого нить мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 08:15 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMVДанных не много, а обращений много. Задумался об отдельных, фоновых процессах (Thread). Второй вариант - кешировать обращение к базе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 08:34 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Какие еще мысли? SwingWorker - стандартное решение. Если его немного допилить то оно вообще шикартное. Я к нему и глобальный индикатор прогресса приделывал и еще много чего. У нас ERP вообще не блокировался. Оператор вводит данные нон-стоп а все вычисления и тем более запросы - в фоне обновляют разные поля согласно бизнес-логике. Hо прежде чем прыгать с головой в разработку я бы рекомендовал и теорию подтянуть https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html про Event Dispatch Thread, Event Queue, invokeLater, invokeAndWait. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 08:37 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Спасибо! Со SwingWorker как то сталкивался, но почему то сформировалось мнение что это для типа отрисовок и прочей шляпы с фасадом. Может лишнее, но проведу аналогию: Есть совхоз, поле и 3 пахаря. В совхоз нужно отчитаться что поле вспахано. Пахари могут работать по очереди (как у меня сейчас), а могут параллельно. Но, не прокатит, запустить каждого пахаря по отдельности (в отдельный поток) и пойти отчитаться в совхоз о проделанной работе. Нужно чтобы они закончили свою работу и только тогда получить плюшку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 08:49 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMV, Элементарно, заведи переменную CountThread. Каждый поток в конце увеличивает на 1. Дальше догадался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 08:54 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Petro123AndronovMV, Элементарно, заведи переменную CountThread. Каждый поток в конце увеличивает на 1. Дальше догадался? Ну хорошо, я посчитаю сколько выполнилось, но это будет уже поздно, т.к. если из текущего потока запускается отдельный (дочерний), то текущий не останавливается. А в моем случае это означает, что из тек. потока (главного) запустятся 3 отдельных и дойдет до return. А мне надо, чтобы они(отдельные потоки) все запустились, но метод не сделал return пока она все не завершаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 09:07 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMVВ совхоз нужно отчитаться что поле вспахано. Пахари могут работать по очереди (как у меня сейчас), а могут параллельно. Но, не прокатит, запустить каждого пахаря по отдельности (в отдельный поток) и пойти отчитаться в совхоз о проделанной работе. Нужно чтобы они закончили свою работу и только тогда получить плюшку. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. boilerplate код добавить по вкусу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 09:32 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Потерял тут немного: Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 09:43 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMVPetro123AndronovMV, Элементарно, заведи переменную CountThread. Каждый поток в конце увеличивает на 1. Дальше догадался? Ну хорошо, я посчитаю сколько выполнилось, но это будет уже поздно, т.к. если из текущего потока запускается отдельный (дочерний), то текущий не останавливается. А в моем случае это означает, что из тек. потока (главного) запустятся 3 отдельных и дойдет до return. А мне надо, чтобы они(отдельные потоки) все запустились, но метод не сделал return пока она все не завершаться. Причём тут return? Ты видимо не понял идею. Последний общий метод не запускается, пока его не запустит один из потоков на выходе (последний). Так понятно с землекопами пахарями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 09:51 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMVэто будет уже поздно А сеттер счётчика зачем? Из него ты в основном потоке и побежишь докладывать)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 09:55 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMVЧувствую как мое приложение на Swing начинает тормозить.AndronovMVДанных не много, а обращений многоЭто что-то вроде " 100 запросов для 100 TextField-ов "?AndronovMVПриложение работает с БД ОраслеAndronovMVа в реальности может быть совсем не SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 10:07 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Usman, )) Чел просто решил изучить потоки, но вместа примера про тракторы наплёл что то невообразимое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 10:20 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Petro123AndronovMVпропущено... Ну хорошо, я посчитаю сколько выполнилось, но это будет уже поздно, т.к. если из текущего потока запускается отдельный (дочерний), то текущий не останавливается. А в моем случае это означает, что из тек. потока (главного) запустятся 3 отдельных и дойдет до return. А мне надо, чтобы они(отдельные потоки) все запустились, но метод не сделал return пока она все не завершаться. Причём тут return? Ты видимо не понял идею. Последний общий метод не запускается, пока его не запустит один из потоков на выходе (последний). Так понятно с землекопами пахарями? Так понятно! Спасибо! ) Petro123Usman, )) Чел просто решил изучить потоки, но вместа примера про тракторы наплёл что то невообразимое. ))) Хотел чтобы вы абстрагировались и не предлагали оптимизировать запрос БД . Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 11:19 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMV, По моему мнению, самое толковое решение у Blazkowicz. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:29 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 16:41 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMVно оказалось все как всегда намного проще. Ну, да. Нет ничего проще чем наговнокодить и потом накопипастить. А операции с одним полем в трех паралелльных потоках это вообще прелестно. Вы там потом synchronized поставите, чтобы потоки случайно вдруг вместе не работали, а строго по очереди? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 16:49 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Кстати, стали забывать про CompletableFuture, в котором куча методов для того чтобы запустить, да, подождать. https://dotnetcodr.com/2016/11/26/waiting-for-background-tasks-to-finish-using-the-completablefuture-class-in-java/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 16:56 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMV, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 17:02 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMV Код: java 1. 2. 3. 4. 5. Если это ГУИ, то основной поток встанет и заморозит интерфейс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 17:33 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Чет не понял, то что я выше написал - говнокод? Так то изменения в "поле" каждым пахарям не связаны друг с другом. Другими словами они работаю каждые со своими переменными в контексте поля. Да, и не собирался я синхронизировать их)) Копи-паст это для наглядности в реале у меня по другому. И там честно говоря то над чем я работаю - бекграунд, со свингом связь позже. За CompletableFuture спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 17:53 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Petro123, Ну во 1 это не поток ГУИ Во 2, тут цель была запаралелить пахарей, а не вообще все. ) Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 17:55 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
Ну кстати ща попробую CompletableFuture ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 17:59 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMVPetro123, Ну во 1 это не поток ГУИ Во 2, тут цель была запаралелить пахарей, а не вообще все. ) Спасибо! ))) ok ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 17:59 |
|
||
|
Параллелизм Java
|
|||
|---|---|---|---|
|
#18+
AndronovMVЧет не понял, то что я выше написал - говнокод? Ну, да. Управление потоками перемешанно с задачами. Лямды не используются. Копипаста на лицо. AndronovMVТак то изменения в "поле" каждым пахарям не связаны друг с другом. Сегодня не связаны, а завтра связаны. Поэтому лучше дать каждому пахарю польностью независимый кусок, а потом собрать куски в одно поле. AndronovMVКопи-паст это для наглядности в реале у меня по другому. Ну, какая же тут наглядность. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 18:10 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2122492]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 481ms |

| 0 / 0 |
