Хорошо, новичок в gpars, поэтому, пожалуйста, простите меня, если у этого есть очевидный ответ.
Вот мой сценарий. В настоящее время у нас есть часть нашего кода, заключенная в блок Thread.start {}. Это делается для того, чтобы отправлять сообщения в очередь сообщений в фоновом режиме и не блокировать запрос пользователя. Проблема, с которой мы недавно столкнулись, заключается в том, что для больших блоков работы пользователи могут выполнить другое действие, которое приведет к повторному выполнению этого блока. Поскольку он многопоточный, второй пакет сообщений может быть отправлен раньше, чем первый, что приведет к повреждению данных.
Я хотел бы изменить этот процесс, чтобы он работал как поток очереди с gpars. Я видел примеры создания пулов, таких как
def pool = GParsPool.createPool()
or
def pool = new ForkJoinPool()
а затем использовать пул как
GParsPool.withExistingPool(pool) {
...
}
Похоже, что это будет учитывать случай, когда, если пользователь снова выполнит действие, я смогу повторно использовать созданный пул, и действия не будут выполняться не по порядку, если у меня есть размер пула, равный единице.
Мой вопрос: это лучший способ сделать это с gpars? И кроме того, как я узнаю, что пул закончил всю свою работу? Заканчивается ли он, когда вся работа закончена? Если да, то есть ли метод, который можно использовать для проверки того, закончился ли/завершен пул, чтобы узнать, что мне нужен новый?
Любая помощь будет оценена по достоинству.