powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Параллелизм Java
4 сообщений из 29, страница 2 из 2
Параллелизм Java
    #39545488
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну ладно, спорить не буду, возможно не дорос ))
Как с CompletableFuture попробую отпишусь. спасибо!
...
Рейтинг: 0 / 0
Параллелизм Java
    #39546077
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

Да возьмине Вы наконец код со SwingWorker, который Вам Blazkowicz предложил, разберитесь с ним и с тем, почему его для swing приложений разработали и используйте. Не выдумывайте трехколесный велосипед с квадратными колесами.
...
Рейтинг: 0 / 0
Параллелизм Java
    #39546234
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery Shiskin,
Concurrent.* счас более хайп).
Так говорят?
Мне у него второй пример больше нравится.
...
Рейтинг: 0 / 0
Параллелизм Java
    #39547066
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVПривет!

Чувствую как мое приложение на Swing начинает тормозить...
...
Есть метод , в котором происходит те самые обращения и загрузка из БД.
...
После того как обращения и загрузка всех таблиц завершена, возврат метода .

Ну и кто же запускает этот метод, в котором происходят обращения к БД?
Неужели какая-то реакция на нажатие кнопки, вроде actionPerformed, работающая на EDT? Ну тогда понятно, что ваше приложение тормозит. И после распараллеливания обращений к БД оно будет продолжать тормозить, хотя и меньше. И тормозит тот самый метод, который ждет загрузки всех таблиц, прежде чем сделать возврат.

Такие вещи делаются наоборот: после всех обращений к БД происходит вызов метода, а не возврат. Причем вызов происходит на EDT с помощью
Код: java
1.
EventQueue.invokeLater(method);


Этот вызов можно сделать разными способами:
- вручную, как я только что написал
- с помощью SwingWorker
- c помощью
Код: java
1.
CompletableFuture.thenRunAsync(method, swingExecutor)

, где
Код: java
1.
Executor swingExecutor = method-> EventQueue.invokeLater(method);


- с помощью простых акторов, как в этом примере (да, это я написал). Здесь акторы - это как CompletableFuture многоразового использования. Как и CompletableFuture, могут работать на разных Executor'ах. Вам в вашей задаче нужно 2 Executor'а: swingExecutor и dbExecutor, последний будет содержать некоторое фиксированное число потоков исполнения. Оптимальное число этих потоков надо будет подобрать исходя из скорости загрузки данных в БД. Я думаю, это число будет в диапазоне от 5 до 20. Число задач, исполняемое на этих Executor'ах, определяется логикой вашего приложения. Это и есть главное преимущество использования пулов потоков перед непосредственным использованием потоков исполнения (в том числе перед использованием SwingWorker) - что число задач может быть очень большим, а число потоков малым и может меняться, не затрагивая логику приложения.
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Параллелизм Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]