Выполнение любой операции блокировки в событии Dispatch Thread приведет к тому, что ваш GUI перестанет реагировать и перестанет перекрашиваться. Вот почему длительные операции должны выполняться в фоновом потоке.
Кажется, вы знаете, что вам нужно делать что-то в фоновом потоке, но все же хотите заблокировать EDT. Вы не должны этого делать. Вместо этого вы хотите получить обратный вызов - некоторый код, который будет запущен после завершения фоновых потоков.
Уже предоставленный механизм обратного вызова, доступный в Java 6+, - SwingWorker
, Внесите работника, поместив join()
s (и start()
s) в метод doInBackground()
. Затем любые операции Swing, которые вы хотите сделать после, могут войти в done()
.
Есть ли шанс, что вы запускаете свою лямбду в VPC? Я видел похожее поведение с триггером Cognito, который запускался в VPC, когда был холодный запуск. Как только лямбда нагрелась, проблема ушла
Я догадывался, что внутренне Cognito имеет очень короткий период ожидания для запуска триггера, и если триггер не отвечает вовремя, он автоматически повторяет попытку.
В итоге нам пришлось добавить логику в наш триггер для проверки этого сценария, чтобы мы не дублировали записи в нашу базу данных.